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

Làm thế nào để tạo một chỉ mục duy nhất với điều kiện và truy vấn con trong PostgreSQL?

Nhược điểm của việc sử dụng quy tắc là quy tắc chỉ đơn giản là viết lại truy vấn sau khi nó được phân tích cú pháp, vì vậy nếu dữ liệu được thêm thông qua trình kích hoạt, nó sẽ không kích hoạt. Sẽ an toàn hơn khi thêm ràng buộc CHECK gọi một hàm với logic của bạn. Nếu tôi làm theo đúng logic của bạn, nó sẽ giống như sau:

CREATE OR REPLACE FUNCTION check_user_client(fkc int) 
  RETURNS boolean AS
$$
DECLARE
  i int;
BEGIN
  SELECT count(*) INTO i FROM legal_entity WHERE fk_client = fkc;
  IF (i > 0) THEN
    RETURN true;
  END IF;

  SELECT count(*) INTO i FROM user_client WHERE fk_client = fkc;
  IF (i = 0) THEN
    RETURN true;
  END IF;

  RETURN false;  
END
$$ LANGUAGE plpgsql;

ALTER TABLE user_client ADD CONSTRAINT unique_user CHECK (check_user_client(fk_client));


  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ông tin đăng nhập cơ sở dữ liệu vĩnh viễn của Heroku

  2. Cách hoạt động của hàm CONCAT () trong PostgreSQL

  3. Tham gia hai bảng bằng cách sử dụng id và con cháu từ bảng giống cây

  4. Cách bỏ nhiều bảng trong PostgreSQL bằng ký tự đại diện

  5. Nhóm các bản ghi có liên quan, nhưng chỉ chọn các trường nhất định từ bản ghi đầu tiên