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

PostgreSQL 9.4 - Použijte vlastní operátor v omezení EXCLUDE

Vybral sis opravdové utrpení. Použijte jedinečný index, který je mnohem jednodušší, bezpečnější a rychlejší.

CREATE TABLE foo (
    foo_id serial PRIMARY KEY,
    foo text NOT NULL,
    bar timestamptz,
    baz timestamptz
);
CREATE TABLE

CREATE UNIQUE INDEX foo_foo_bar_baz_idx ON foo 
(foo, coalesce(bar, 'infinity'), coalesce(baz, 'infinity'));
CREATE INDEX

INSERT INTO foo VALUES
(default, '', null, null),
(default, '', now(), null),
(default, '', null, now());
INSERT 0 3

INSERT INTO foo VALUES
(default, '', null, null);
ERROR:  duplicate key value violates unique constraint "foo_foo_bar_baz_idx"
DETAIL:  Key (foo, (COALESCE(bar, 'infinity'::timestamp with time zone)), (COALESCE(baz, 'infinity'::timestamp with time zone)))=(, infinity, infinity) already exists.



  1. Je možné spustit řetězec v MySQL?

  2. Jak nahradit více znaků v SQL?

  3. Kontrola informací o síti Oracle RAC a IP adresách

  4. Proč se mi při použití jednoduché uložené procedury zobrazuje chyba MySQL č. 1312?