sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-drop-beperking met onbekende naam

Om dynamisch een externe-sleutelbeperking te verwijderen en opnieuw te maken, kunt u deze allemaal in een functie inpakken of de DO gebruiken commando:

DO
$body$
DECLARE
   _con text := (
      SELECT quote_ident(conname)
      FROM   pg_constraint
      WHERE  conrelid = 'myschema.mytable'::regclass
      AND    confrelid = 'myschema.myreftable'::regclass
      LIMIT 1 -- there could be multiple fk constraints. Deal with it ...
      );

BEGIN
   EXECUTE '
      ALTER TABLE wuchtel12.bet DROP CONSTRAINT ' || _con;

   -- do stuff here

   EXECUTE '
      ALTER TABLE myschema.mytable
      ADD CONSTRAINT ' || _con || ' FOREIGN KEY (col)
      REFERENCES myschema.myreftable (col)';
END
$body$

U moet eigenaar zijn van de tabel om ALTER TABLE te gebruiken .
Anders kunt u een functie maken met LANGUAGE plpgsql SECURITY DEFINER (met dezelfde body) en

ALTER FUNCTION foo() OWNER TO postgres;

postgres hier een superuser zijn - of de eigenaar van de tafel.
Maar zorg ervoor dat je weet wat de handleiding te zeggen heeft over beveiliging.

De handleiding bevat ook meer over dynamische commando's.




  1. Hoe LocalTime() werkt in PostgreSQL

  2. Een SQL Server Agent-taak maken in Azure Data Studio

  3. java.sql.SQLException:geen geschikte driver gevonden voor jdbc:mysql://localhost:3306/dbname

  4. tabelrijen bijwerken in postgres met behulp van subquery