sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een unieke index met voorwaardelijke en subquery in PostgreSQL?

Het nadeel van het gebruik van regels is dat regels de query eenvoudigweg herschrijven nadat deze is geparseerd, dus als de gegevens via een trigger worden toegevoegd, wordt deze niet geactiveerd. Het is veiliger om een ​​CHECK-beperking toe te voegen die een functie aanroept met uw logica. Als ik je logica goed volg, zou het zoiets moeten zijn als:

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. Opvolging:hoe modelleer je korting op artikelen in een database?

  2. Dynamische tabelnaam in postgreSQL 9.3

  3. Standaard tabelvergrendelingshint op SQL Server 2005/2008

  4. Oracle SQL-aanmaakprocedure om wekelijkse ranglijst te tonen