sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL drop omezení s neznámým názvem

Chcete-li dynamicky zrušit a znovu vytvořit omezení cizího klíče, můžete to celé zabalit do funkce nebo použít DO příkaz:

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$

Abyste mohli používat ALTER TABLE, musíte tabulku vlastnit .
Jinak můžete vytvořit funkci pomocí LANGUAGE plpgsql SECURITY DEFINER (pomocí stejného těla) a

ALTER FUNCTION foo() OWNER TO postgres;

postgres být zde superuživatelem – nebo vlastníkem stolu.
Ujistěte se však, že víte, co o zabezpečení říká příručka.

Manuál také obsahuje více o dynamických příkazech.




  1. Vložit data do SQL Server 2017

  2. Prohlížení prázdnin očima datového modeláře

  3. ORA-12519 TNS:Nebyl nalezen žádný vhodný obslužný program

  4. Mapování pole pomocí režimu spánku