select-for-version-17.sql

application/octet-stream

Filename: select-for-version-17.sql
Type: application/octet-stream
Part: 1
Message: information_schema query not working in PostgreSQL version 17
SELECT
    tc.table_name,
    tc.constraint_name,
    tc.constraint_type,
    'alter table if exists '
    ||quote_ident(tc.table_name)
    ||' add constraint '
    ||quote_ident(tc.constraint_name)
    ||' foreign key ('
    ||string_agg(quote_ident(kcu.column_name), ', ' ORDER BY kcu.ordinal_position)
    ||')'
    ||' references '
    ||quote_ident(rkcu.table_name)
    ||' ('
    ||string_agg(quote_ident(rkcu.column_name), ', ' ORDER BY rkcu.ordinal_position)
    ||')'
    ||' on delete '
    ||CASE
        WHEN rc.delete_rule = 'CASCADE' THEN 'cascade'
        WHEN rc.delete_rule = 'SET NULL' THEN 'set null'
        WHEN rc.delete_rule = 'SET DEFAULT' THEN 'set default'
        ELSE 'no action'
        END
    ||' on update '
    ||case
        WHEN rc.update_rule = 'CASCADE' THEN 'cascade'
        WHEN rc.update_rule = 'SET NULL' THEN 'set null'
        WHEN rc.update_rule = 'SET DEFAULT' THEN 'set default'
        ELSE 'no action'
        END
    ||';'
    AS create_statement,
    'alter table if exists '
    ||quote_ident(tc.table_name)
    ||' drop constraint if exists '
    ||quote_ident(tc.constraint_name)
    ||' cascade;'
    AS drop_statement
FROM
    information_schema.table_constraints AS tc
JOIN
    information_schema.key_column_usage AS kcu
    ON kcu.constraint_catalog = 'sigex'
    AND kcu.constraint_schema = 'second'
    AND kcu.table_catalog = 'sigex'
    AND kcu.table_schema = 'second'
    AND kcu.constraint_name = tc.constraint_name
    AND kcu.table_name = tc.table_name
JOIN
    information_schema.referential_constraints AS rc
    ON rc.constraint_catalog = 'sigex'
    AND rc.constraint_schema = 'second'
    AND rc.constraint_name = tc.constraint_name
JOIN
    information_schema.key_column_usage AS rkcu
    ON rkcu.constraint_catalog = 'sigex'
    AND rkcu.constraint_schema = 'second'
    AND rkcu.table_catalog = 'sigex'
    AND rkcu.table_schema = 'second'
    AND rkcu.constraint_name = rc.unique_constraint_name
WHERE
    tc.constraint_type = 'FOREIGN KEY'
    AND tc.constraint_catalog = 'sigex'
    AND tc.constraint_schema = 'second'
    AND tc.table_catalog = 'sigex'
    AND tc.table_schema = 'second'
    AND tc.table_name not ilike 'zyx\_%' escape '\'
GROUP BY
    tc.table_name,
    tc.constraint_name,
    tc.constraint_type,
    rkcu.table_name,
    rc.delete_rule,
    rc.update_rule
ORDER BY
    tc.table_name,
    tc.constraint_name;