Обсуждение: Deferred NOT NULL?
I'd like to create a new table with a NOT NULL constraint that is deferred until the transaction commit. Unfortunately with this definition: CREATE TABLE foo (bar INTEGER NOT NULL INITIALLY DEFERRED); I get this error: ERROR: Misplaced INITIALLY DEFERRED clause Is it possible to do this or do I have to define it as a CHECK constraint and defer that? Greg
Hmmmm, I just found a clearer grammar description in the docs and it appears that only REFERENCES constraints are deferrable in PostgreSQL. I suppose I'll have to handle this via a trigger for now. The book mentions that SQL92 allows for deferrable NOT NULL constraints. Is this planned for anytime soon? Gerg > I'd like to create a new table with a NOT NULL constraint that is deferred > until the transaction commit. Unfortunately with this definition: > > CREATE TABLE foo (bar INTEGER NOT NULL INITIALLY DEFERRED); > > I get this error: > > ERROR: Misplaced INITIALLY DEFERRED clause > > Is it possible to do this or do I have to define it as a CHECK constraint > and defer that?
"Gregory Wood" <gregw@com-stock.com> writes: > Hmmmm, I just found a clearer grammar description in the docs and it appears > that only REFERENCES constraints are deferrable in PostgreSQL. I suppose > I'll have to handle this via a trigger for now. > The book mentions that SQL92 allows for deferrable NOT NULL constraints. Is > this planned for anytime soon? This is (or should be) on the TODO list, but I don't know of anyone with near-term plans to fix it. The whole area of constraints could use an overhaul, see past discussions in pghackers. regards, tom lane