No nie ma stworzenie wyzwalacz szerokości, ale dla wszystkich tych bulk-admin-operacji można użyć tabel systemowych PostgreSQL do generowania zapytań dla ciebie zamiast pisać je ręcznie. W tym przypadku można uruchomić:
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;
To będzie Ci komplet strun, które są polecenia SQL, takich jak:
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
Wystarczy uruchomić je na raz (albo psql
lub pgAdmin) .
Teraz pewne wyjaśnienie:
- wybiorę nazwy tabel w mojej bazy danych przy użyciu
information_schema.tables
tabeli systemowej. Ponieważ istnieją dane dotyczące dosłownie wszystkich tabel, pamiętaj, aby wykluczyć schematy i stoły z tabelami pg_catalog
i information_schema
ze swojego select
.
- Używam funkcji
quote_ident(text)
, która umieszcza ciąg znaków wewnątrz podwójnego cudzysłowu (""
), jeśli to konieczne (np. Nazwy ze spacjami lub dużymi literami wymagają tego).
- Kiedy mam listę nazw tabel po prostu łączę je z pewnymi ciągami statycznymi, aby uzyskać moje polecenia SQL.
- Piszę to polecenie, używając pod-zapytania, ponieważ chcę, żebyś miał lepsze pojęcie o tym, co tu się dzieje. Możesz napisać pojedyncze zapytanie, wstawiając
quote_ident(table_schema) || '.' || quote_ident(table_name)
zamiast tab_name
.
Nie, nie ma obsługi dla wyzwalaczy w bazie danych. Dlaczego tak czy inaczej chcesz robić tę konkretną rzecz? –
Potrzebuję rejestrować akcje bazy danych, aby zsynchronizować się ze smartfonem. Następnie uruchomię tabelę wyzwalacza według tabeli. Dzięki za pomoc. –
@EduardoRafaelCorreadeSouza Wiem, że minęło kilka dni, odkąd zadałeś to pytanie i prawdopodobnie zrobiłeś to ręcznie. Ale sprawdź moją odpowiedź. Jeśli sprawił, że nauczysz się czegoś użytecznego, co może ci w przyszłości pomóc przy podobnym zadaniu, byłoby miło z twojej strony, gdybyś przyjął moją odpowiedź. –