PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ограничение за изпускане на PostgreSQL с неизвестно име

За динамично пускане и пресъздаване на ограничение за външен ключ, можете да го увиете във функция или да използвате DO команда:

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$

Трябва да притежавате таблицата, за да използвате ALTER TABLE .
Иначе можете да създадете функция с LANGUAGE plpgsql SECURITY DEFINER (с помощта на едно и също тяло) и

ALTER FUNCTION foo() OWNER TO postgres;

postgres като суперпотребител тук - или собственик на таблицата.
Но не забравяйте да знаете какво казва ръководството за сигурността.

Ръководството също има повече за динамичните команди.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Няма резултати, върнати от грешката на заявката в PostgreSQL

  2. Как да превключите база данни с помощта на PostgreSQL

  3. MySQL срещу PostgreSQL за уеб приложения

  4. psycopg2 как се справят с TypeError:не всички аргументи се преобразуват по време на форматиране на низ

  5. Вземете последния ден от месеца в PostgreSQL