Yah tidak ada pembuatan pemicu di seluruh basis data tetapi untuk semua operasi admin massal seperti itu, Anda dapat menggunakan tabel sistem PostgreSQL untuk menghasilkan kueri untuk Anda alih-alih menulisnya dengan tangan. Dalam hal ini Anda dapat menjalankan:
SELECT
'CREATE TRIGGER '
|| tab_name
|| ' BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();' AS trigger_creation_query
FROM (
SELECT
quote_ident(table_schema) || '.' || quote_ident(table_name) as tab_name
FROM
information_schema.tables
WHERE
table_schema NOT IN ('pg_catalog', 'information_schema')
AND table_schema NOT LIKE 'pg_toast%'
) tablist;
Ini akan memberi Anda serangkaian string yang merupakan perintah SQL seperti:
CREATE TRIGGER schema1.table1 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema1.table2 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema1.table3 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema2.table1 BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
CREATE TRIGGER schema2."TABLE2" BEFORE DELETE ON ALL DATABASE FOR EACH ROW EXECUTE PROCEDURE delete_data();
...
etc
Anda hanya perlu menjalankannya sekaligus (baik dengan psql
atau pgAdmin).
Sekarang beberapa penjelasan:
- Saya memilih nama tabel di database saya menggunakan
information_schema.tables
tabel sistem. Karena ada data dari semua tabel, ingatlah untuk mengecualikanpg_catalog
daninformation_schema
skema dan tabel roti panggang dariselect
. Anda . - Saya menggunakan
quote_ident(text)
fungsi yang akan menempatkan string di dalam tanda kutip ganda (""
) jika perlu (mis. nama dengan spasi atau huruf kapital mengharuskan itu). - Ketika saya memiliki daftar nama tabel, saya hanya menggabungkannya dengan beberapa string statis untuk mendapatkan perintah SQL saya.
- Saya menulis perintah itu menggunakan sub-kueri karena saya ingin Anda mendapatkan gambaran yang lebih baik tentang apa yang terjadi di sini. Anda dapat menulis satu kueri dengan meletakkan
quote_ident(table_schema) || '.' || quote_ident(table_name)
menggantikantab_name
.