Thread: Fwd: postgresql-autodoc - missinterprets "version"
Hi PostgreSQL developers! Recently we got the bug report below. It seems that there is a special treatment of columns named "version". Normally fields of primary key indices are printed out unquoted, however, if the column is named "version", the name is printed out in quotes.=20 This behaviour seems to confuse PostgreSQL autotoc. Does this behaviour serve any purpose or it is an error? Thanks and have a nice day! Martin ----- Forwarded message from Bastian Blank <waldi@debian.org> ----- Date: Sat, 29 May 2004 17:17:42 +0200 From: Bastian Blank <waldi@debian.org> To: submit@bugs.debian.org Subject: postgresql-autodoc - missinterprets "version" X-Spam-Status: No, hits=3D-7.0 required=3D4.0 tests=3DBAYES_01,HAS_PACKAGE= =20 autolearn=3Dno version=3D2.60-bugs.debian.org_2004_03_25 Package: postgresql-autodoc Version: 1.22-2 Severity: normal postgresql_autodoc missinterprets fields with name "version", as postgresql sometimes reports version, sometimes "version". | F-Key Name Type Description | "version" UNIQUE#1 | id serial PRIMARY KEY | package.version.id version integer NOT NULL | package.binarypackage_name.id binarypackage_name integer UNIQUE#1 NO= T NULL Bastian --=20 Military secrets are the most fleeting of all. -- Spock, "The Enterprise Incident", stardate 5027.4 ----- End forwarded message ----- ----- Forwarded message from Tommaso Moroni <moronito@debian.org> ----- Date: Mon, 31 May 2004 20:43:08 +0200 From: Tommaso Moroni <moronito@debian.org> To: 251595@bugs.debian.org Subject: Re: Processed: reassigning bug #251595 to postgresql package Mail-Followup-To: 251595@bugs.debian.org X-Spam-Status: No, hits=3D-3.0 required=3D4.0 tests=3DBAYES_00 autolearn=3D= no=20 version=3D2.60-bugs.debian.org_2004_03_25 On Mon, May 31, 2004 at 06:09:58PM +0100, Oliver Elphick wrote: > What SQL command produced these results? Actually they are the postgresql-autodoc output. Here's what I've tried: test=3D> CREATE TABLE test (version smallint primary key); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" = for table "test" CREATE TABLE test=3D> \d test Tabella "public.test" Colonna | Tipo | Modificatori ---------+----------+-------------- version | smallint | not null Indici: "test_pkey" chiave primaria, btree ("version") The strange thing is the last line. I also tried with different=20 field types and got the same results. However if the field name isn't "version" there are no problem at all. I hope it helps. --=20 Tommaso Moroni moronito@debian.org ----- End forwarded message ----- --=20 Martin Pitt Debian GNU/Linux Developer martin@piware.de mpitt@debian.org http://www.piware.de http://www.debian.org
On Thu, 8 Jul 2004, Martin Pitt wrote: > Hi PostgreSQL developers! > > Recently we got the bug report below. It seems that there is a special > treatment of columns named "version". Normally fields of primary key > indices are printed out unquoted, however, if the column is named > "version", the name is printed out in quotes. > > This behaviour seems to confuse PostgreSQL autotoc. > > Does this behaviour serve any purpose or it is an error? It doesn't appear to be necessary to quote the identifier, however version and "version" refer to the same identifier in this case so I wouldn't call it an error, either. My guess as to the reason comes from this comment fragment in quote_identifier: * Check for keyword. This test is overly strong, since many of * the "keywords" known to the parser are usable as column names, * but the parser doesn't provide any easy way to test for whether * an identifier is safe or not... so be safe not sorry. version is one of those keywords that are usable as column names I believe.
Hi Stephan! On 2004-07-08 7:10 -0700, Stephan Szabo wrote: > It doesn't appear to be necessary to quote the identifier, however version > and "version" refer to the same identifier in this case so I wouldn't call > it an error, either. My guess as to the reason comes from this comment > fragment in quote_identifier: >=20 > * Check for keyword. This test is overly strong, since many of > * the "keywords" known to the parser are usable as column names, > * but the parser doesn't provide any easy way to test for whether > * an identifier is safe or not... so be safe not sorry. This makes sense, thank you. I reassigned this bug to postgresql-autodoc. Just ignoring the quotes cannot be that difficult... Thanks and have a nice day! Martin --=20 Martin Pitt Debian GNU/Linux Developer martin@piware.de mpitt@debian.org http://www.piware.de http://www.debian.org
Martin Pitt <martin@piware.de> writes: > On 2004-07-08 7:10 -0700, Stephan Szabo wrote: >> It doesn't appear to be necessary to quote the identifier, however version >> and "version" refer to the same identifier in this case so I wouldn't call >> it an error, either. > This makes sense, thank you. I reassigned this bug to > postgresql-autodoc. Just ignoring the quotes cannot be that > difficult... I am not sure why VERSION is a keyword, since AFAICS it is not used in any production in gram.y. Also, I've been harboring thoughts of fixing things so that quote_identifier wouldn't quote "unreserved" keywords. But having said that, it's surely postgresql-autodoc's fault that it cannot cope with quoted identifiers. There *will* be cases where PK field names are quoted, such as mixed-case identifiers --- you do not need a keyword collision to make that happen. regards, tom lane