sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořit jedinečný index s podmíněným a poddotazem v PostgreSQL?

Nevýhodou použití pravidel je, že pravidla jednoduše přepíší dotaz poté, co je analyzován, takže pokud jsou data přidána prostřednictvím spouštěče, nespustí se. Je bezpečnější přidat omezení CHECK, které volá funkci s vaší logikou. Pokud se řídím vaší logikou správně, mělo by to být něco jako:

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. Vytváření přístupového menu s ovládáním stromového zobrazení

  2. Eclipse Hibernate.cfg.xml propojuje sys databázi z MySQL

  3. Načítání dat z datového rámce v R do více tabulek v MySQL se stejným názvem, ale jiným názvem schématu

  4. Jak vytvořit dynamický sql pro s sys_refcursor v oracle