PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ograniczenie upuszczania PostgreSQL o nieznanej nazwie

Aby dynamicznie upuścić i odtworzyć ograniczenie klucza obcego, możesz zawinąć to wszystko w funkcję lub użyć DO polecenie:

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$

Musisz być właścicielem tabeli, aby używać ALTER TABLE .
W przeciwnym razie możesz utworzyć funkcję za pomocą LANGUAGE plpgsql SECURITY DEFINER (używając tego samego ciała) i

ALTER FUNCTION foo() OWNER TO postgres;

postgres bycie superużytkownikiem tutaj - lub właścicielem tabeli.
Ale pamiętaj, aby wiedzieć, co podręcznik ma do powiedzenia na temat bezpieczeństwa.

Instrukcja zawiera również więcej na temat poleceń dynamicznych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja Slony-I 2.0.x do najnowszej wersji 2.1.x

  2. Adnotacja hibernacji dla typu szeregowego PostgreSQL

  3. Pierwsze kroki z replikacją strumieniową PostgreSQL

  4. Prezentacja slajdów:Ulepszenia partycjonowania w PostgreSQL 11

  5. Przewodnik eksperta po Slony Replication dla PostgreSQL