Обсуждение: CREATE TABLE ... CONSTRAINT
Hi all I have been using postgreSQL for a while now and it is doing the job I want it to. Thank you to all pgsql-hackers for their good job. I am running a vanilla 6.3.2 installed from postgresql-{,clients-,devel-,data-}6.3.2-4.rpm. Some of the problems of taht distribution stem from the rpm specfile (for instance, a world-writable and world-readable pg_pwd !!) and are not interesting for this list. However, there is one thing which I find annoying: testdata=> CREATE TABLE test ( number int check ( number > 3 ) ); works fine, but the table is dumped with a different syntax: CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; which is not accepted back: testdata=> CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; ERROR: parser: parse error at or near "constraint" Now, the second syntax is standard SQL and the parser should recognize it, but in any case at least pg_dump compliance should be aimed at. Bye Dario -- ###################################################################### # Dario Besseghini, system manager, # Department of Computer Science, University of Pisa # http://www.di.unipi.it/~besseghi
Hello Dario, lunedì, 17 agosto 98, you wrote: DB> Hi all DB> I have been using postgreSQL for a while now and it is doing the job DB> I want it to. Thank you to all pgsql-hackers for their good job. DB> I am running a vanilla 6.3.2 installed from DB> postgresql-{,clients-,devel-,data-}6.3.2-4.rpm. Some of the problems DB> of taht distribution stem from the rpm specfile (for instance, a DB> world-writable and world-readable pg_pwd !!) and are not interesting DB> for this list. DB> However, there is one thing which I find annoying: testdata=>> CREATE TABLE test ( number int check ( number > 3 ) ); DB> works fine, but the table is dumped with a different syntax: DB> CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; DB> which is not accepted back: testdata=>> CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; DB> ERROR: parser: parse error at or near "constraint" DB> Now, the second syntax is standard SQL and the parser should DB> recognize it, but in any case at least pg_dump compliance should be DB> aimed at. DB> Bye DB> Dario DB> -- DB> ###################################################################### DB> # Dario Besseghini, system manager, DB> # Department of Computer Science, University of Pisa DB> # http://www.di.unipi.it/~besseghi Ciao Dario, Seems that your syntax (CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3;) isn't SQL standard. ----------------------- There are two kinds of Integrity CONSTRAINTs; - the Column constraint: CREATE TABLE test ( number int check ( number > 3 ) ); and - the Table constraint: CREATE TABLE test ( number int4 CONSTRAINT test_number CHECK (number > 3)); This one has the right syntax and it works. Best regards, Jose' mailto:sferac@bo.nettuno.it
> > Ciao Dario, > > Seems that your syntax (CREATE TABLE test (number int4) CONSTRAINT > test_number CHECK number > 3;) > isn't SQL standard. > > ----------------------- > There are two kinds of Integrity CONSTRAINTs; > - the Column constraint: > CREATE TABLE test ( number int check ( number > 3 ) ); > and > - the Table constraint: > CREATE TABLE test ( number int4 CONSTRAINT test_number CHECK (number > 3)); > > This one has the right syntax and it works. > > Best regards, > Jose' mailto:sferac@bo.nettuno.it > Ciao Jose'. I know that the two forms you mention do work. pg_dump, however, not I, uses the third form, which doesn't work. $ pg_dump -t test testdata \connect - besseghi CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; COPY test FROM stdin; \. The point of my post was that I think the postgresql parser should accept pg_dump's output. Both solutions are legitimate: either pg_dump or the parser might be changed. In the former case, the docs should also be changed, because both `\h create table' in psql and `man create_table' put CONSTRAINT outside the parentheses. Bye, Dario
> > Hi all > > I have been using postgreSQL for a while now and it is doing the job > I want it to. Thank you to all pgsql-hackers for their good job. > > I am running a vanilla 6.3.2 installed from > postgresql-{,clients-,devel-,data-}6.3.2-4.rpm. Some of the problems > of taht distribution stem from the rpm specfile (for instance, a > world-writable and world-readable pg_pwd !!) and are not interesting > for this list. > > However, there is one thing which I find annoying: > > testdata=> CREATE TABLE test ( number int check ( number > 3 ) ); > > works fine, but the table is dumped with a different syntax: > > CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; > > which is not accepted back: > > testdata=> CREATE TABLE test (number int4) CONSTRAINT test_number CHECK number > 3; > ERROR: parser: parse error at or near "constraint" > > Now, the second syntax is standard SQL and the parser should > recognize it, but in any case at least pg_dump compliance should be > aimed at. This is fixed. 6.4 beta is September 1. [ I ought to make this text a macro.] -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 + If your life is a hard drive, | (610) 353-9879(w) + Christ can be your backup. | (610) 853-3000(h)