PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL 9.4 - Използвайте потребителски оператор в ограничението EXCLUDE

Избрахте истинско изпитание. Използвайте уникален индекс, който е много по-прост, по-безопасен и по-бърз.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Приложения за преглед на Heroku:копирайте DB за преглед на приложението

  2. PostgreSQL EXPLAIN – Какви са разходите за заявка?

  3. Сума от времевата разлика между редовете

  4. PostgreSQL Получаване на произволна дата/час между две дата/час

  5. Как да сравним две таблици в postgres