Обсуждение: Upper / lower cases on table and column names

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

Upper / lower cases on table and column names

От
Reiner Dassing
Дата:
(PostgreSQL) 7.1.1:

Hello all!

I was trying to adopt a database application to PostgreSQL.
(It is written for MySQL and Oracle using perl)

During this process I recognized the phenomena that upper case letters
of table names and column names are not preserved
in PostgreSQL.
Is this a "featue" of PostgreSQL or do I miss something?

Example:
Id and textId as a column name should conserve upper case letters 'I'
but \d data converts it to lower case words:

psql ...
create table data ( Id int not null, textId int not null);

\d data          Table "data" Attribute |  Type   | Modifier
-----------+---------+---------- id        | integer | not null textid    | integer | not null

and
create table Data ( Id int not null, textId int not null);

results in:
ERROR:  Relation 'data' already exists

In the interpretation of my application table 'data' and 'Data' is something 
different.

-- 
--
Mit freundlichen Gruessen / With best regards   Reiner Dassing



Re: Upper / lower cases on table and column names

От
Achilleus Mantzios
Дата:
On Fri, 25 Oct 2002, Reiner Dassing wrote:

> (PostgreSQL) 7.1.1:
>
> Hello all!
>
> I was trying to adopt a database application to PostgreSQL.
> (It is written for MySQL and Oracle using perl)
>
> During this process I recognized the phenomena that upper case letters
> of table names and column names are not preserved
> in PostgreSQL.
> Is this a "featue" of PostgreSQL or do I miss something?

Both :)

You may double quote the literals of names in pgsql,
but then in every statement you must retain the double quotes,
which is annoying.
Change the table name to something more meaningful.


>
> Example:
> Id and textId as a column name should conserve upper case letters 'I'
> but \d data converts it to lower case words:
>
> psql ...
> create table data ( Id int not null, textId int not null);
>
> \d data
>            Table "data"
>   Attribute |  Type   | Modifier
> -----------+---------+----------
>   id        | integer | not null
>   textid    | integer | not null
>
> and
> create table Data ( Id int not null, textId int not null);
>
> results in:
> ERROR:  Relation 'data' already exists
>
> In the interpretation of my application table 'data' and 'Data' is something
> different.
>
> --
> --
> Mit freundlichen Gruessen / With best regards
>     Reiner Dassing
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>

==================================================================
Achilleus Mantzios
S/W Engineer
IT dept
Dynacom Tankers Mngmt
Nikis 4, Glyfada
Athens 16610
Greece
tel:    +30-10-8981112
fax:    +30-10-8981877
email:  achill@matrix.gatewaynet.com       mantzios@softlab.ece.ntua.gr



Re: Upper / lower cases on table and column names

От
Stephan Szabo
Дата:
On Fri, 25 Oct 2002, Reiner Dassing wrote:

> I was trying to adopt a database application to PostgreSQL.
> (It is written for MySQL and Oracle using perl)
>
> During this process I recognized the phenomena that upper case letters
> of table names and column names are not preserved
> in PostgreSQL.
> Is this a "featue" of PostgreSQL or do I miss something?

There's some question about whether it should instead fold to upper
case, but in any case its a sort of cheat to handle the case
insensitivity of regular identifiers.

> create table data ( Id int not null, textId int not null);
> create table Data ( Id int not null, textId int not null);
>
> results in:
> ERROR:  Relation 'data' already exists
>
> In the interpretation of my application table 'data' and 'Data' is something
> different.

AFAICT it shouldn't be.  SQL92 basically says that two regular identifiers
are the equivalent if the identifer bodies compare equally.  The
identifier bodies of a regular identifier are equivalent to an identifier
body in which each lower-case character is replaced with an upper case
one.