PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ràng buộc thả PostgreSQL với tên không xác định

Để tự động thả và tạo lại ràng buộc khóa ngoại, bạn có thể gói tất cả nó trong một hàm hoặc sử dụng DO lệnh:

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$

Bạn phải sở hữu bảng để sử dụng ALTER TABLE .
Nếu không, bạn có thể tạo một hàm với LANGUAGE plpgsql SECURITY DEFINER (sử dụng cùng một phần thân) và

ALTER FUNCTION foo() OWNER TO postgres;

postgres là siêu người dùng ở đây - hoặc chủ nhân của bảng.
Nhưng hãy nhớ biết hướng dẫn sử dụng nói gì về bảo mật.

Sách hướng dẫn cũng có nhiều hơn về các lệnh động.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thời gian chờ truy vấn trong pg-promise

  2. Làm thế nào để sử dụng RETURNING với ON CONFLICT trong PostgreSQL?

  3. Cột truy vấn SQL không tồn tại lỗi

  4. pg_restore Alternatives - PostgreSQL Backup và Automatic Recovery with ClusterControl

  5. PostgreSQL DATEADD () Tương đương