Wie kann ich einen Einschränkungsnamen in Postgresql löschen, indem ich nur den Namen kenne? Ich habe eine Liste von Einschränkungen, die von einem Skript eines Drittanbieters automatisch generiert werden. Ich muss sie löschen, ohne den Tabellennamen zu kennen, nur den Einschränkungsnamen.
postgresql
Nascar
quelle
quelle
Antworten:
Sie müssen die Tabellennamen abrufen, indem Sie die folgende Abfrage ausführen:
SELECT * FROM information_schema.constraint_table_usage WHERE table_name = 'your_table'
Alternativ können Sie
pg_constraint
diese Informationen abrufenselect n.nspname as schema_name, t.relname as table_name, c.conname as constraint_name from pg_constraint c join pg_class t on c.conrelid = t.oid join pg_namespace n on t.relnamespace = n.oid where t.relname = 'your_table_name';
Anschließend können Sie die erforderliche ALTER TABLE-Anweisung ausführen:
ALTER TABLE your_table DROP CONSTRAINT constraint_name;
Natürlich können Sie die Abfrage veranlassen, die vollständige alter-Anweisung zurückzugeben:
SELECT 'ALTER TABLE '||table_name||' DROP CONSTRAINT '||constraint_name||';' FROM information_schema.constraint_table_usage WHERE table_name in ('your_table', 'other_table')
Vergessen Sie nicht, das table_schema in die WHERE-Klausel (und die ALTER-Anweisung) aufzunehmen, wenn mehrere Schemas mit denselben Tabellen vorhanden sind.
quelle
Wenn Sie auf 9.x von PG sind, können Sie die DO-Anweisung verwenden, um dies auszuführen. Tun Sie einfach, was a_horse_with_no_name getan hat, aber wenden Sie es auf eine DO-Anweisung an.
DO $$DECLARE r record; BEGIN FOR r IN SELECT table_name,constraint_name FROM information_schema.constraint_table_usage WHERE table_name IN ('your_table', 'other_table') LOOP EXECUTE 'ALTER TABLE ' || quote_ident(r.table_name)|| ' DROP CONSTRAINT '|| quote_ident(r.constraint_name) || ';'; END LOOP; END$$;
quelle
- Löschen Sie die richtige Fremdschlüsseleinschränkung
ALTER TABLE affiliations DROP CONSTRAINT affiliations_organization_id_fkey;
HINWEIS:
Zugehörigkeiten -> Tabellenname
sociations_organization_id_fkey -> Contraint-Name
quelle