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

Jak stworzyć unikalny indeks z warunkowym i podzapytaniem w PostgreSQL?

Minusem korzystania z reguł jest to, że reguły po prostu przepisują zapytanie po jego przeanalizowaniu, więc jeśli dane zostaną dodane przez wyzwalacz, nie zostaną uruchomione. Bezpieczniej jest dodać ograniczenie CHECK, które wywołuje funkcję z twoją logiką. Jeśli dobrze postępuję zgodnie z twoją logiką, powinno to wyglądać tak:

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. Dlaczego połączenie z moim serwerem Postgres na platformie Azure kończy się niepowodzeniem, jeśli moja aplikacja nie ma włączonego protokołu SSL?

  2. sprzężenie wewnętrzne i sprzężenie zewnętrzne; czy kolejność tabel jest ważna od?

  3. Operator nie istnieje:json =json

  4. Czy nie używanie NULL w PostgreSQL nadal używa bitmapy NULL w nagłówku?

  5. Jak odwoływać się do nazwanych parametrów w funkcjach sql Postgresa?