Thread

  1. [PATCH v1 1/1] teach vacuumlo to handle domains over oid

    Nathan Bossart <nathan@postgresql.org> — 2026-05-14T03:05:02Z

    ---
     contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++-
     1 file changed, 13 insertions(+), 1 deletion(-)
    
    diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
    index 8102569466b..230f6958fc1 100644
    --- a/contrib/vacuumlo/vacuumlo.c
    +++ b/contrib/vacuumlo/vacuumlo.c
    @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param)
     	 * delete...
     	 */
     	buf[0] = '\0';
    +	if (PQserverVersion(conn) >= 140000)
    +		strcat(buf, "WITH RECURSIVE cte AS "
    +			   "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type "
    +			   "UNION ALL "
    +			   "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t "
    +			   "JOIN cte t2 ON t.oid = t2.typbasetype) ");
     	strcat(buf, "SELECT s.nspname, c.relname, a.attname ");
     	strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t ");
    +	if (PQserverVersion(conn) >= 140000)
    +		strcat(buf, ", cte ");
     	strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped ");
     	strcat(buf, "      AND a.attrelid = c.oid ");
     	strcat(buf, "      AND a.atttypid = t.oid ");
     	strcat(buf, "      AND c.relnamespace = s.oid ");
    -	strcat(buf, "      AND t.typname in ('oid', 'lo') ");
    +	if (PQserverVersion(conn) >= 140000)
    +		strcat(buf, "  AND t.oid = cte.oid2 "
    +			   "       AND cte.typname = 'oid' ");
    +	else
    +		strcat(buf, "  AND t.typname in ('oid', 'lo') ");
     	strcat(buf, "      AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")");
     	strcat(buf, "      AND s.nspname !~ '^pg_'");
     	res = PQexec(conn, buf);
    -- 
    2.50.1 (Apple Git-155)
    
    
    --K++Jp4URl2Oj0VAw--