Re: Removing Database Names as Spaces? - Mailing list pgsql-novice

From Jonathon Batson
Subject Re: Removing Database Names as Spaces?
Date
Msg-id 41241700.5090300@octahedron.com.au
Whole thread Raw
In response to Re: Removing Database Names as Spaces?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Removing Database Names as Spaces?
List pgsql-novice
Some interesting results with the Database name and spaces issue

template1=# select datname,length(datname),ascii(datname[0]) as ascii0,ascii(datname[1]) as ascii1, ascii(datname[2]) as ascii2  from pg_da
tabase;
    datname    | length | ascii0 | ascii1 | ascii2
---------------+--------+--------+--------+--------
 template1     |      9 |    116 |    101 |    109
 template0     |      9 |    116 |    101 |    109
 jess          |      4 |    106 |    101 |    115
   |     11 |     99 |     97 |    109
    |     10 |    106 |    117 |    115
 swim_user_log |     13 |    115 |    119 |    105
(6 rows)


So there are regular characters in the datname field but where are they?.
And yet there is a name when doing the following query names are in the result.

template1=# select oid, datname from pg_database;
  oid   |    datname   
--------+---------------
      1 | template1
  16975 | template0
  58468 | jess
 520136 | cam_testdb
 540414 | justatest
 358025 | swim_user_log

(6 rows)

So from here with the oids is was easy if brutal to drop the dbs.
update pg_database set datname = 'foo' where oid = 520136;
drop database foo;

Thanx Tom

Tom Lane wrote:
Jonathon Batson <jonathon@octahedron.com.au> writes: 
I have a script that went haywire and created 2 databases with what
looks like empty names OR names made up of spaces.   
Judging by your lack of success and the funny formatting of the -l
output, they're not spaces.  Possibly carriage returns and other stuff.

One approach is to find out exactly what you got, instead of guessing.
Try "select datname,length(datname) from pg_database" then
"select datname,ascii(datname[N]) from pg_database" where N ranges
from 0 to one less than the length you just found out.  That will
give you the ASCII codes of the characters that are there.  After
that you can start thinking about how to type it ;-)

Also, there's always the brute-force way of renaming databases:
select oid, datname from pg_database;update pg_database set datname = 'foo' where oid = <number from above>

This isn't ordinarily recommended but it seems safe enough, especially
if you're going to drop the database immediately after ...
		regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend
 

pgsql-novice by date:

Previous
From: George Weaver
Date:
Subject: Re: pgAdmin Connection
Next
From: Keith Worthington
Date:
Subject: Re: New Installation