sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL drop-begrænsning med ukendt navn

For dynamisk at slippe og genskabe en fremmednøglebegrænsning kan du pakke det hele ind i en funktion eller bruge DO kommando:

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$

Du skal eje tabellen for at bruge ALTER TABLE .
Ellers kan du oprette en funktion med LANGUAGE plpgsql SECURITY DEFINER (med samme krop) og

ALTER FUNCTION foo() OWNER TO postgres;

postgres være en superbruger her - eller ejeren af ​​bordet.
Men sørg for at vide, hvad manualen siger om sikkerhed.

Manualen har også mere om dynamiske kommandoer.




  1. Hvordan konfigurerer jeg HikariCP til postgresql?

  2. postgresql generere sekvens uden mellemrum

  3. Kan ikke ændre kolonne, der bruges i en fremmednøglebegrænsning

  4. R12.2 Udgavebestemmelse og opsætning