[postgresql] unique constraint en een niet verplichte kolom

Pagina: 1
Acties:

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:50
ik heb een aantal tabellen met daarin een kolom genaamd deleted_date. Deze deleted_date is
een niet verplicht veld en gebruik ik om historische gegevens te kunnen bewaren. In de meeste
gevallen moet een combinatie van een of meerdere kolommen samen met deze deleted_date
een uniek gegeven zijn, dus wil ik daar een unique constraint op leggen.

Tot mijn verbazing, gaat zo'n unique constraint elke keer af, als ik een record probeer te inserten
waarbij de deleted_date null is. (ook als de tabel leeg is en deze waarde dus echt uniek is). Dit
vind ik een beetje naar, zoals je kan begrijpen.

Is iemand hier ook al eens tegen aan gelopen en zo ja, heb je hier dan een oplossing voor
gevonden, of Is dit gewoon niet mogelijk in postgresql?

Egoist: A person of low taste, more interested in themselves than in me


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Tot mijn verbazing, gaat zo'n unique constraint elke keer af, als ik een record probeer te inserten waarbij de deleted_date null is.
In principe zou dit gewoon moeten werken. In ieder geval in de versie die ik gebruik (7.3.3).; ik heb het net nog even getest:
code:
1
2
3
4
5
6
7
8
CREATE TABLE test (
  Veld1 TEXT, 
  Veld2 DATE,
  UNIQUE (Veld1, Veld2)
);
INSERT INTO test VALUES('Hallo!', '2003-07-25');
INSERT INTO test VALUES('Hallo!', NULL);
INSERT INTO test VALUES('Hallo!', NULL);
De uitvoer van een SELECT wordt dan:
code:
1
2
3
4
5
6
7
SELECT * FROM test;
 veld1  |   veld2
--------+------------
 Hallo! | 2003-07-25
 Hallo! |
 Hallo! |
(3 rows)
Hoe heb je de tabel precies aangemaakt en wat is de melding die je krijgt bij het inserten? Laat anders eens wat (test) code zien :)

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:50
ow bloody... debuggen is alles. Zie net dat er een check constraint afgaat ipv een unique constraint

code:
1
ERROR:  ExecInsert: rejected due to CHECK constraint "tst_onr_chk1" on "timeslot_owners"


Denk dat 26 uur aan een stuk door coderen toch niet helemaal gezond is. Tijd voor wat nachtrust dus. Toch bedankt voor het aanzetten richting het meer dan goed lezen!

Egoist: A person of low taste, more interested in themselves than in me