sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL släppbegränsning med okänt namn

För att dynamiskt släppa och återskapa en främmande nyckel-begränsning kan du slå in allt i en funktion eller använda 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 måste äga tabellen för att använda ALTER TABLE .
Annars kan du skapa en funktion med LANGUAGE plpgsql SECURITY DEFINER (med samma text) och

ALTER FUNCTION foo() OWNER TO postgres;

postgres att vara en superanvändare här - eller ägaren av bordet.
Men se till att veta vad manualen har att säga om säkerhet.

Manualen har också mer om dynamiska kommandon.




  1. Rank funktion i MySQL

  2. Uppdatera med parameter med hjälp av room persistent bibliotek

  3. Skiftlägeskänsliga variabler i SQL Server

  4. Skapa en postgresql DB med psycopg2