MySQL转人大金仓数据库,由于人大金仓不止支持自增属性,所以执行以下sql,可以让人大金仓自动为每一个id为int的主键变成自增

DO $$
DECLARE
    rec RECORD;
    seq_name TEXT;
BEGIN
    FOR rec IN
        SELECT
            c.table_schema,
            c.table_name
        FROM information_schema.columns c
        JOIN information_schema.table_constraints tc 
            ON c.table_name = tc.table_name 
            AND c.table_schema = tc.table_schema
        JOIN information_schema.constraint_column_usage ccu 
            ON tc.constraint_name = ccu.constraint_name
        WHERE c.column_name = 'id'
            AND tc.constraint_type = 'PRIMARY KEY'
            AND c.column_default IS NULL
            AND c.data_type IN ('integer', 'bigint')
            AND c.table_schema = 'public'
    LOOP
        seq_name := rec.table_name || '_id_seq';

        EXECUTE format('CREATE SEQUENCE IF NOT EXISTS %I START WITH 1 INCREMENT BY 1;', seq_name);
        EXECUTE format('ALTER TABLE %I ALTER COLUMN id SET DEFAULT nextval(''%I'');', rec.table_name, seq_name);
    END LOOP;
END $$;

 

posted @ 2025-05-22 17:58  仲夏不凉爽  阅读(249)  评论(0)    收藏  举报