Re: Removing Database Names as Spaces?

Поиск
Список
Период
Сортировка
От Jonathon Batson
Тема Re: Removing Database Names as Spaces?
Дата
Msg-id 41241700.5090300@octahedron.com.au
обсуждение исходный текст
Ответ на Re: Removing Database Names as Spaces?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Removing Database Names as Spaces?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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 по дате отправления:

Предыдущее
От: George Weaver
Дата:
Сообщение: Re: pgAdmin Connection
Следующее
От: Keith Worthington
Дата:
Сообщение: Re: New Installation