Re: Casing - Mailing list pgadmin-support

From Dave Page
Subject Re: Casing
Date
Msg-id 61653.193.195.77.162.1006894300.squirrel@ssl.vale-housing.co.uk
Whole thread Raw
In response to Casing  ("Colin Freas" <cef6@georgetown.edu>)
Responses Re: Casing
List pgadmin-support
It's rumoured that Colin Freas once said:
>
> For anyone who follows the JDBC mailing list, there was a discussion
> over the last day or so about the casing of identifiers in Postgres and
> SQL92.
>
> I failed to realize that when a table is created with quotations around
> the identifiers and the case is mixed, you must then refer to that
> idenifier evermore with the same casing sealed in double quotes.

Hi Colin,

pgAdmin quotes identifiers because that should always work. Consider the
following examples of identifiers - on the left is the value entered, on
the right is what the PostgreSQL parser will convert it to for use as (for
example) a table name:

tablename    -> tablename
TableName    -> tablename
"tablename"  -> tablename
"TableName"  -> TableName
table name   -> [will produce an error]
Table Name   -> [will produce an error]
"table name" -> table name
"Table Name" -> Table Name

I think the important thing to note is that lower case names without
special characters like spaces are unaffected by the quotes. Future
queries may omit them or include them to no effect.

On the other hand, if you wish to use upper case or special characters,
you must *always* use quotes.

I'm not saying this is the correct behaviour as per the spec, but this is
how PostgreSQL works.

> Initially I used pgamin's wizard to create my tables.  When I realized
> what was happening with the quotes and the capitalization, I dropped
> the tables, and reran the create table queries sans quotes.  The thing
> is, pgadmin still seemed to create the tables using the quotes, depite
> my arbitrary SQL not containing any.  To achieve the desired affect, I
> dropped the tables once again, and recreated the tables with psql.

pgAdmin doesn't modify any arbitrary SQL you enter except to remove any
comments. It certainly won't convert your hand typed:

CREATE TABLE sheep(baa text)

into

CREATE TABLE "sheep"("baa" text)

> Now, if the wizard wants to use quotes in creating tables, I say 'Wave
> your magic wand away!'  But, for the little green monster to
> 'helpfully' place quotes around identifiers when executing my SQL makes
> me want to execute him.

And it would me. Nicely put btw :-)

> Also, now that I have created my tables with psql without the quotes,
> and my servlet is running happily without identifiers needing to be
> enclosed in quotes, as I view a table's SQL in the definition pane, I
> think it would be useful to see the quotes only when appropriate,
> considering the behavior of Postgres when "'s are used in table
> creation vs. when they are not used.
>
> Of course it is possible I'm misinterpreting what's going on, but my
> explanation seems to fit the behavior I've observed, and what I've read
> over the last day or so about the casing system.

I have to admit I'm confused by your problem. I (and my staff) use pgAdmin
on a number of projects, and *never* quote identifiers or use identifiers
that would require quoting, yet we have no problems.

I would also point out that when PostgreSQL stores identifiers in
pg_class, pg_attribute or whereever, it doesn't store any information that
would enable you to figure out if quotes were used intially or not.

If you can provide an example of the problem you're having, I happily look
into it further for you.

Regards, Dave.



pgadmin-support by date:

Previous
From: "Colin Freas"
Date:
Subject: Casing
Next
From: "Colin Freas"
Date:
Subject: Re: Casing