Обсуждение: Case bug in SQL Constraint

Поиск
Список
Период
Сортировка

Case bug in SQL Constraint

От
"Warren W. Gay VE3WWG"
Дата:
The SQL query below reports an error if the value "uid" is
provided in uppercase ("UID"). The error reported is:

ERROR:  CREATE TABLE: column "UID" named in key does not exist

The problem is eliminated if "UID" is made "uid".
Here is the full text of the query:

CREATE TABLE PASSWD (
  NAME        VARCHAR(32) NOT NULL,
  PASSWD      VARCHAR(32),
  UID         INTEGER NOT NULL,
  GID         INTEGER NOT NULL,
  GECOS       VARCHAR(80) NOT NULL,
  DIR         VARCHAR(256) NOT NULL,
  SHELL       VARCHAR(256) NOT NULL,
    CONSTRAINT "PASSWD_PKEY" PRIMARY KEY ("UID")
)

Thanks, Warren.

Other Info:

$ uname -a
FreeBSD hibiscus.ve3wwg.org 4.4-RC FreeBSD 4.4-RC #1: Wed Oct 17
22:46:11 EDT 2001
root@hibiscus.ve3wwg.org:/usr/src/sys/compile/hibiscus  i386

wwg=# select version();
                               version
---------------------------------------------------------------------
 PostgreSQL 7.2.1 on i386-portbld-freebsd4.6, compiled by GCC 2.95.3
(1 row)

--
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg

Re: Case bug in SQL Constraint

От
Stephan Szabo
Дата:
On Thu, 1 Aug 2002, Warren W. Gay VE3WWG wrote:

> The SQL query below reports an error if the value "uid" is
> provided in uppercase ("UID"). The error reported is:
>
> ERROR:  CREATE TABLE: column "UID" named in key does not exist
>
> The problem is eliminated if "UID" is made "uid".
> Here is the full text of the query:
>
> CREATE TABLE PASSWD (
>   NAME        VARCHAR(32) NOT NULL,
>   PASSWD      VARCHAR(32),
>   UID         INTEGER NOT NULL,

Here you're giving an unquoted name so it gets casefolded
(currently to lowercase).

>   GID         INTEGER NOT NULL,
>   GECOS       VARCHAR(80) NOT NULL,
>   DIR         VARCHAR(256) NOT NULL,
>   SHELL       VARCHAR(256) NOT NULL,
>     CONSTRAINT "PASSWD_PKEY" PRIMARY KEY ("UID")
Here you're giving a quoted name so no casefolding occurs.

In general you shoul be consistant about either quoting
or not quoting table and column names, mixing them is
dangerous.