PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara membuat pemicu untuk semua tabel di postgresql?

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 mengecualikan pg_catalog dan information_schema skema dan tabel roti panggang dari select . 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) menggantikan tab_name .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mewakili waktu mendatang di PostgreSQL

  2. Fungsi Postgres mengembalikan tabel tidak mengembalikan data dalam kolom

  3. Cara yang tepat untuk membubuhi keterangan bidang peringkat untuk kumpulan kueri

  4. Penyatuan Koneksi PostgreSQL dengan PgBouncer

  5. Bagaimana cara memanggil fungsi Postgres yang mengembalikan catatan SETOF?