Martijn van Oosterhout wrote:
On Sat, Dec 02, 2006 at 11:08:51AM -0700, Ken Johanson wrote:
And my vote is to not have such an option. But I'm not the one who
decide so don't worry about what I think :-) I would like to have an
option to upper case the identifiers instead of lower casing them as pg
do. The sql standard say that they should be upper cased. But as far as
I know there are no plan at the moment to add such an option either.
Some time in the future I expect it to be implemented only because it's
the standard.
I think it's unlikely to happen anytime soon. The primary reason being
that then you can no longer use indexes to search the catalog. Which
I'm pretty sure this is no the case - other DBs do allow index search on
columns/identifiers regardless of their case. Probably the typical
strategy is to use a case-insensitive hashtable (fold case for the keys
before generating the hash). If its the actual data that you're
referring to in index searches, that would be a separate topic I think.
means it has to be fixed at initdb time. And it would break a large
number of client apps, for no particularly good reason.
I take a different opinion on this:
-*If* the option to turn on case-insenetive behavior were selectable at
the DB or session level, the existing apps could continue to use the
case sensitve mode and be completely unaffected.
-IMO turning it on *globally* would only break apps that are built
case-sensitivly *and* refer to identifiers of the same name (but mixed
case) *and* are written for PG (since PG *had* been by and large
non-portable until recently.. the addition of standard string quoting
for example)
-It would *enhance* people's ability to "bring in" apps from so many
other DBs which don't treat identifiers as case sensitive. More of a
compatibility boon than loss. Thats is a particularly good reason to me
(since I'm the one who has to issue DDL on all my camelCase columns and
recode my identifiers).
Since the way identifiers are treated is user-visible, it would mean
that apps would have to be coded to work with any setting. What would
probably happen is that app A would only work with case-sensetive, and
app B would only work with case-insensetive, and you end up with two
apps that can't work on the same database.
That's *bad*, we don't want to go there.
That is a good point and I'd normally agree - entice people to use the
lowest common denominator behavior and code their apps case-sensitive.
And yet, the DBs that expect case-sens are now the minority, and we have:
a) programmers who code against MySQL or MSSQL, or;
b) are laymen try to run or port an app designed on MySQL to PG
Maybe not right per se - but the more popular way of doing things
eventually wins out.
..
In one way I think that even allowing creation of a separate "rowid" and
"rowId" sort of violates set theory in a 4+ GL language... a "name" in
its most abstract (human) sense doesn't (shouldn't) consider the case of
its characters. Only what the characters are. A rowid is also a rowId
(or ROWID). Who really intentionally mixes them? (only 3-4GL
*programmers* who consider all-caps to represent constants in my
experience).
The thing is, postgresql *is* case-insensetive, as is the whole SQL
language. It not case-preserving, that's all.
Right, it's case insensitive only if you're willing to accept case
folding (down) everything that's not quoted. Not being case-preserving,
as you say.
But thats a pita to anyone coming from those "other" DBs and wants their
column names to have mixed/camel case (for readability). PG right now
*forces* them to change/adhere to an underscore naming, or to quote
*every* mixed case identifier. You MUST tolerate having your column
names stored in all-lower case, or else you must quote all of them.
Best,
Ken
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match