sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skapar man ett unikt index med villkorlig och subquery i PostgreSQL?

Nackdelen med att använda regler är att reglerna helt enkelt skriver om frågan efter att den har analyserats så att om data läggs till via en utlösare kommer den inte att aktiveras. Det är säkrare att lägga till en CHECK-begränsning som anropar en funktion med din logik. Om jag följer din logik korrekt borde det vara något i stil med:

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. Kan en SQL-procedur returnera en tabell?

  2. Hur man laddar upp/lagrar flera bilder i mysql-databasen i php

  3. 7 bra tekniska vanor som alla arbetsgivare bör ta till sig

  4. Dödläge på SELECT/UPDATE