Error in ALTER DATABASE command

Started by William Garrisonover 17 years ago6 messagesgeneral
Jump to latest
#1William Garrison
postgres@mobydisk.com

In Postgresql 8.2.9 on Windows, you cannot rename a database if the name
contains mixed case.

To replicate:
1) Open the pgadmin tool.
2) Create a database named "MixedCase" (using the UI, not using a query
window or using PSQL)
3) Open a query window, or use PSQL to issue the following command
ALTER DATABASE MixedCase RENAME TO anything_else;
PostgreSQL will respond with:
ERROR: database "mixedcase" does not exist
SQL state: 3D000

This does not happen if you create the database using a manual query in
pgadmin, or if you use psql. Both of those tools will create the
database as "mixedcase" instead of "MixedCase"

I am using:
"PostgreSQL 8.2.9 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.4.2 (mingw-special)"

I guess for now, I have to dump and reload my database. :(

Postgresql seems to force many things to lower case. Is it a bug that
the admin tool lets you create a database with mixed case names? Or is
it a bug that you cannot rename them thereafter?

#2Doug McNaught
doug@mcnaught.org
In reply to: William Garrison (#1)
Re: Error in ALTER DATABASE command

On Tue, Sep 23, 2008 at 11:49 AM, William Garrison
<postgres@mobydisk.com> wrote:

In Postgresql 8.2.9 on Windows, you cannot rename a database if the name
contains mixed case.

3) Open a query window, or use PSQL to issue the following command
ALTER DATABASE MixedCase RENAME TO anything_else;
PostgreSQL will respond with:
ERROR: database "mixedcase" does not exist
SQL state: 3D000

You need to quote the identifier using double-quotes to avoid
case-folding (this is a general rule):

ALTER DATABASE "MixedCase" RENAME TO anything_else;

Postgresql seems to force many things to lower case.

Yes, it's actually a variation on the SQL standard, which specifies
forcing to upper case (as Oracle does).

Is it a bug that the
admin tool lets you create a database with mixed case names?

The admin tool is a separate project and works by its own rules.

Or is it a bug
that you cannot rename them thereafter?

The FAQ has a good section on identifier case-folding and quoting, I
think. Probably worth a read.

-Doug

In reply to: William Garrison (#1)
Re: Error in ALTER DATABASE command

On 23/09/2008 16:49, William Garrison wrote:

In Postgresql 8.2.9 on Windows, you cannot rename a database
if the name contains mixed case.

Yes you can, in 8.3 anyway:

postgres=# create database "TeSt";
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding
------------------+----------+----------
[snip]
teSt | postgres | UTF8
[snip]

postgres=# alter database "TeSt" rename to "tEsT";
ALTER DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding
------------------+----------+----------
[snip]
tEsT | postgres | UTF8
[snip]

3) Open a query window, or use PSQL to issue the following command
ALTER DATABASE MixedCase RENAME TO anything_else; PostgreSQL will
respond with: ERROR: database "mixedcase" does not exist SQL state:
3D000

Have you tried quoting the database name, thus? -

ALTER DATABASE "MixedCase" RENAME TO anything_else;

This ought to do it.

This does not happen if you create the database using a manual query
in pgadmin, or if you use psql. Both of those tools will create the
database as "mixedcase" instead of "MixedCase"

[snip]

Postgresql seems to force many things to lower case. Is it a bug
that the admin tool lets you create a database with mixed case names?
Or is it a bug that you cannot rename them thereafter?

No, it's PostgreSQL's (well-documented) behaviour - as you noted, it
folds names to lower-case unless you specifically quote them. I'd hazard
a guess that PgAdmin is quoting the database name behind the scenes,
hence you can create mixed-case names.

Ray.

------------------------------------------------------------------
Raymond O'Donnell, Director of Music, Galway Cathedral, Ireland
rod@iol.ie
Galway Cathedral Recitals: http://www.galwaycathedral.org/recitals
------------------------------------------------------------------

#4Steve Crawford
scrawford@pinpointresearch.com
In reply to: William Garrison (#1)
Re: Error in ALTER DATABASE command

William Garrison wrote:

In Postgresql 8.2.9 on Windows, you cannot rename a database if the
name contains mixed case.

To replicate:
1) Open the pgadmin tool.
2) Create a database named "MixedCase" (using the UI, not using a
query window or using PSQL)
3) Open a query window, or use PSQL to issue the following command
ALTER DATABASE MixedCase RENAME TO anything_else;
PostgreSQL will respond with:
ERROR: database "mixedcase" does not exist
SQL state: 3D000

Did you try:
ALTER DATABASE "MixedCase"....?

Note the use of double-quotes around the name. I don't have any Windows
machines to try this with but it appears you just need to add the
double-quotes to prevent PostgreSQL from folding to lower-case.

Cheers,
Steve

#5William Garrison
mobydisk@mobydisk.com
In reply to: Doug McNaught (#2)
Re: Error in ALTER DATABASE command

I found out about the quoting thing about 30 seconds after I made the
post. :) Thanks everyone who replied.

Douglas McNaught wrote:

Show quoted text

On Tue, Sep 23, 2008 at 11:49 AM, William Garrison
<postgres@mobydisk.com> wrote:

In Postgresql 8.2.9 on Windows, you cannot rename a database if the name
contains mixed case.

3) Open a query window, or use PSQL to issue the following command
ALTER DATABASE MixedCase RENAME TO anything_else;
PostgreSQL will respond with:
ERROR: database "mixedcase" does not exist
SQL state: 3D000

You need to quote the identifier using double-quotes to avoid
case-folding (this is a general rule):

ALTER DATABASE "MixedCase" RENAME TO anything_else;

Postgresql seems to force many things to lower case.

Yes, it's actually a variation on the SQL standard, which specifies
forcing to upper case (as Oracle does).

Is it a bug that the
admin tool lets you create a database with mixed case names?

The admin tool is a separate project and works by its own rules.

Or is it a bug
that you cannot rename them thereafter?

The FAQ has a good section on identifier case-folding and quoting, I
think. Probably worth a read.

-Doug

#6Lennin Caro
lennin.caro@yahoo.com
In reply to: William Garrison (#1)
Re: Error in ALTER DATABASE command
--- On Tue, 9/23/08, William Garrison <postgres@mobydisk.com> wrote:

From: William Garrison <postgres@mobydisk.com>
Subject: [GENERAL] Error in ALTER DATABASE command
To: "Postgres General List" <pgsql-general@postgresql.org>
Date: Tuesday, September 23, 2008, 3:49 PM
In Postgresql 8.2.9 on Windows, you cannot rename a database
if the name
contains mixed case.

To replicate:
1) Open the pgadmin tool.
2) Create a database named "MixedCase" (using the
UI, not using a query
window or using PSQL)
3) Open a query window, or use PSQL to issue the following
command
ALTER DATABASE MixedCase RENAME TO anything_else;
PostgreSQL will respond with:
ERROR: database "mixedcase" does not exist
SQL state: 3D000

This does not happen if you create the database using a
manual query in
pgadmin, or if you use psql. Both of those tools will
create the
database as "mixedcase" instead of
"MixedCase"

I am using:
"PostgreSQL 8.2.9 on i686-pc-mingw32, compiled by GCC
gcc.exe (GCC)
3.4.2 (mingw-special)"

I guess for now, I have to dump and reload my database. :(

Postgresql seems to force many things to lower case. Is it
a bug that
the admin tool lets you create a database with mixed case
names? Or is
it a bug that you cannot rename them thereafter?

error i dont think so, teh pgadmin create the object whit the double quote (") implicit. Rename the database
ALTER DATABASE "MixedCase" RENAME TO mixedcase