Apakah mungkin untuk mengubah nama batasan di Postgres? Saya memiliki PK yang ditambahkan dengan:
ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
Dan saya ingin memiliki nama yang berbeda untuk itu, agar konsisten dengan sistem lainnya. Haruskah saya menghapus batasan PK yang ada dan membuat yang baru? Ataukah ada cara yang 'lunak' untuk mengelolanya?
Terima kasih!
sumber
pg_catalog
, mengulanginya melaluiLOOP
dan menggunakan kueri dinamis untuk mengganti nama.Kami menemukan bahwa kunci utama sering tertinggal di belakang nama tabel utama. Skrip ini membantu kami mengidentifikasi dan memperbaiki masalah.
select table_name, constraint_name , 'ALTER TABLE ' || table_name || ' RENAME CONSTRAINT ' || constraint_name || ' TO ' || left(table_name, 58) || '_pkey;' from information_schema.table_constraints tc where constraint_type = 'PRIMARY KEY' and constraint_name <> left(table_name, 58) || '_pkey';
Ini menemukan semua tabel di mana nama kunci utama tidak lagi menjadi pola "default" (
<tablename>_pkey
) dan membuat skrip ganti nama untuk masing-masing.Batas 58 karakter di atas pada kode di atas adalah untuk memperhitungkan ukuran maksimum nama batasan (63bytes).
Jelas merasakan memeriksa apa yang dikembalikan sebelum menjalankannya. Semoga bermanfaat bagi orang lain.
sumber