agora inbox for [email protected]
help / color / mirror / Atom feedDoes slot_deform_tuple need to care about dropped columns?
1039+ messages / 3 participants
[nested] [flat]
* Does slot_deform_tuple need to care about dropped columns?
@ 2018-11-07 17:44 Andres Freund <[email protected]>
0 siblings, 1 reply; 1039+ messages in thread
From: Andres Freund @ 2018-11-07 17:44 UTC (permalink / raw)
To: pgsql-hackers; Tom Lane <[email protected]>
Hi,
Currently functions like slot_getattr() first check if the attribute is
already deformed:
Datum
slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull)
{
...
/*
* fast path if desired attribute already cached
*/
if (attnum <= slot->tts_nvalid)
{
*isnull = slot->tts_isnull[attnum - 1];
return slot->tts_values[attnum - 1];
}
...
but later, in the case the attribute isn't already deformed, the
following hunk exists:
/*
* If the attribute's column has been dropped, we force a NULL result.
* This case should not happen in normal use, but it could happen if we
* are executing a plan cached before the column was dropped.
*/
if (TupleDescAttr(tupleDesc, attnum - 1)->attisdropped)
{
*isnull = true;
return (Datum) 0;
}
Which strikes me as quite odd. If somebody previously accessed a *later*
column (be it via slot_getattr, or slot_getsomeattrs), the whole
attisdropped check is neutralized.
I think we either should remove that check as unnecessary, or move it to
slot_deform_tuple(), so it also protects other accesses (like the very
very common direct access to tts_values/isnull).
Tom, you added that code way back when, in a9b05bdc8330. And as far as I
can tell that issue existed back then too.
Greetings,
Andres Freund
^ permalink raw reply [nested|flat] 1039+ messages in thread
* Re: Does slot_deform_tuple need to care about dropped columns?
@ 2018-11-07 17:58 Tom Lane <[email protected]>
parent: Andres Freund <[email protected]>
0 siblings, 1 reply; 1039+ messages in thread
From: Tom Lane @ 2018-11-07 17:58 UTC (permalink / raw)
To: Andres Freund <[email protected]>; +Cc: pgsql-hackers
Andres Freund <[email protected]> writes:
> ... in the case the attribute isn't already deformed, the
> following hunk exists:
> /*
> * If the attribute's column has been dropped, we force a NULL result.
> * This case should not happen in normal use, but it could happen if we
> * are executing a plan cached before the column was dropped.
> */
> if (TupleDescAttr(tupleDesc, attnum - 1)->attisdropped)
> {
> *isnull = true;
> return (Datum) 0;
> }
> Which strikes me as quite odd. If somebody previously accessed a *later*
> column (be it via slot_getattr, or slot_getsomeattrs), the whole
> attisdropped check is neutralized.
Good point. Let's remove it and see what happens.
> Tom, you added that code way back when, in a9b05bdc8330. And as far as I
> can tell that issue existed back then too.
I was just transposing code that had existed before that in ExecEvalVar.
Evidently I didn't think hard about whether the protection was
bulletproof. But since it isn't, maybe we don't need it at all.
I think our checks for obsoleted plans are a lot more bulletproof
than they were back then, so it's entirely likely the issue is moot.
regards, tom lane
^ permalink raw reply [nested|flat] 1039+ messages in thread
* Re: Does slot_deform_tuple need to care about dropped columns?
@ 2018-11-10 01:41 Andres Freund <[email protected]>
parent: Tom Lane <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Andres Freund @ 2018-11-10 01:41 UTC (permalink / raw)
To: Tom Lane <[email protected]>; +Cc: pgsql-hackers
Hi,
On 2018-11-07 12:58:16 -0500, Tom Lane wrote:
> Andres Freund <[email protected]> writes:
> > ... in the case the attribute isn't already deformed, the
> > following hunk exists:
>
> > /*
> > * If the attribute's column has been dropped, we force a NULL result.
> > * This case should not happen in normal use, but it could happen if we
> > * are executing a plan cached before the column was dropped.
> > */
> > if (TupleDescAttr(tupleDesc, attnum - 1)->attisdropped)
> > {
> > *isnull = true;
> > return (Datum) 0;
> > }
>
> > Which strikes me as quite odd. If somebody previously accessed a *later*
> > column (be it via slot_getattr, or slot_getsomeattrs), the whole
> > attisdropped check is neutralized.
>
> Good point. Let's remove it and see what happens.
Done that just now.
> > Tom, you added that code way back when, in a9b05bdc8330. And as far as I
> > can tell that issue existed back then too.
>
> I was just transposing code that had existed before that in ExecEvalVar.
> Evidently I didn't think hard about whether the protection was
> bulletproof. But since it isn't, maybe we don't need it at all.
> I think our checks for obsoleted plans are a lot more bulletproof
> than they were back then, so it's entirely likely the issue is moot.
Yea, I think it ought to be moot these days. If not we better make it
so.
Greetings,
Andres Freund
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid
@ 2026-05-14 03:05 Nathan Bossart <[email protected]>
0 siblings, 0 replies; 1039+ messages in thread
From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw)
---
contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 8102569466b..230f6958fc1 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
* delete...
*/
buf[0] = '\0';
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, "WITH RECURSIVE cte AS "
+ "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
+ "UNION ALL "
+ "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
+ "JOIN cte t2 ON t.oid = t2.typbasetype) ");
strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, ", cte ");
strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
strcat(buf, " AND a.attrelid = c.oid ");
strcat(buf, " AND a.atttypid = t.oid ");
strcat(buf, " AND c.relnamespace = s.oid ");
- strcat(buf, " AND t.typname in ('oid', 'lo') ");
+ if (PQserverVersion(conn) >= 140000)
+ strcat(buf, " AND t.oid = cte.oid2 "
+ " AND cte.typname = 'oid' ");
+ else
+ strcat(buf, " AND t.typname in ('oid', 'lo') ");
strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
strcat(buf, " AND s.nspname !~ '^pg_'");
res = PQexec(conn, buf);
--
2.50.1 (Apple Git-155)
--K++Jp4URl2Oj0VAw--
^ permalink raw reply [nested|flat] 1039+ messages in thread
end of thread, other threads:[~2026-05-14 03:05 UTC | newest]
Thread overview: 1039+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2018-11-07 17:44 Does slot_deform_tuple need to care about dropped columns? Andres Freund <[email protected]>
2018-11-07 17:58 ` Tom Lane <[email protected]>
2018-11-10 01:41 ` Andres Freund <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid 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