agora inbox for [email protected]
help / color / mirror / Atom feedimprove the algorithm cached_plan_cost with real planning time?
1037+ messages / 2 participants
[nested] [flat]
* improve the algorithm cached_plan_cost with real planning time?
@ 2020-10-15 13:12 Andy Fan <[email protected]>
2020-10-15 19:18 ` Re: improve the algorithm cached_plan_cost with real planning time? Andy Fan <[email protected]>
0 siblings, 1 reply; 1037+ messages in thread
From: Andy Fan @ 2020-10-15 13:12 UTC (permalink / raw)
To: PostgreSQL Hackers <[email protected]>
In cached_plan_cost, we do consider the cost of planning, with the following
algorithm.
int nrelations = list_length(plannedstmt->rtable);
result += 1000.0 * cpu_operator_cost * (nrelations + 1);
I run into a case where 10 relations are joined, 3 of them have
hundreds of partitions. at last nrelations = 421 for this case.
| Plan Type | Estimate Cost | Real Execution Time(ms) | Real Planning
Time(ms) |
| Custom Plan | 100867.52 | 13 | 665.816
|
| Generic Plan | 104941.86 | 33(ms) | 0.76 (used
cached plan) |
At last, it chooses the custom plan all the time. so the final performance
is
678ms+, however if it chooses the generic plan, it is 34ms in total. It
looks
to me that the planning cost is estimated improperly.
Since we do know the planning time exactly for a custom plan when we call
cached_plan_cost, if we have a way to convert the real timing to cost, then
we
probably can fix this issue.
The cost unit is seq_page_scan, looks we know the latency of seq_page
read, we can build such mapping. however, the correct seq_page_cost
detection needs we clear file system cache at least which is
something we can't do in pg kernel[1]. So any suggestion on this topic?
note that both plans have no plan time partition prune and have run time
partition prune, so the issue at [2] probably doesn't impact this.
[1]
https://www.postgresql.org/message-id/flat/20191127164821.lspxyrf3c5r6zu5n%40development#cf34e9db803...
[2]
https://www.postgresql.org/message-id/[email protected]...
--
Best Regards
Andy Fan
^ permalink raw reply [nested|flat] 1037+ messages in thread
* Re: improve the algorithm cached_plan_cost with real planning time?
2020-10-15 13:12 improve the algorithm cached_plan_cost with real planning time? Andy Fan <[email protected]>
@ 2020-10-15 19:18 ` Andy Fan <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Andy Fan @ 2020-10-15 19:18 UTC (permalink / raw)
To: PostgreSQL Hackers <[email protected]>
On Thu, Oct 15, 2020 at 9:12 PM Andy Fan <[email protected]> wrote:
>
> In cached_plan_cost, we do consider the cost of planning, with the
> following
> algorithm.
>
> int nrelations = list_length(plannedstmt->rtable);
>
> result += 1000.0 * cpu_operator_cost * (nrelations + 1);
>
> I run into a case where 10 relations are joined, 3 of them have
> hundreds of partitions. at last nrelations = 421 for this case.
>
> | Plan Type | Estimate Cost | Real Execution Time(ms) | Real Planning
> Time(ms) |
> | Custom Plan | 100867.52 | 13 | 665.816
> |
> | Generic Plan | 104941.86 | 33(ms) | 0.76 (used
> cached plan) |
>
> At last, it chooses the custom plan all the time. so the final performance
> is
> 678ms+, however if it chooses the generic plan, it is 34ms in total. It
> looks
> to me that the planning cost is estimated improperly.
>
> Since we do know the planning time exactly for a custom plan when we call
> cached_plan_cost, if we have a way to convert the real timing to cost,
> then we
> probably can fix this issue.
>
> The cost unit is seq_page_scan, looks we know the latency of seq_page
> read, we can build such mapping. however, the correct seq_page_cost
> detection needs we clear file system cache at least which is
> something we can't do in pg kernel[1]. So any suggestion on this topic?
>
One of the simplest methods might be to just add a new GUC
seq_page_latency to the user (and we can also provide tools to user
to detect their IO latency [1]) If user set seq_page_latency, then we can
do the timing to cost translation. I got the seq_page_latency = 8us on
my local SSD environment before, if the above real case have similar
number, then the planning cost should be 83227 while the current
algorithm sets it to 1055. 83227 in this case is big enough to choose
the generic plan.
[1]
https://www.postgresql.org/message-id/flat/20191127164821.lspxyrf3c5r6zu5n%40development#cf34e9db803...
--
Best Regards
Andy Fan
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1037+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1037+ messages in thread
end of thread, other threads:[~2026-05-14 03:05 UTC | newest]
Thread overview: 1037+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-10-15 13:12 improve the algorithm cached_plan_cost with real planning time? Andy Fan <[email protected]>
2020-10-15 19:18 ` Andy Fan <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid 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