[pgsql-jp: 40721] Re: 初めての投稿です。

Norio Suzuki suzuki @ tricorn.co.jp
2011年 3月 25日 (金) 09:52:48 JST


鈴木です。

At Thu, 24 Mar 2011 23:21:36 +0900,
AKIHIKO ITO wrote:
> 
> 教えていただけるのでしたら、お願いなのですが、7.3系のポスグレで、ひとつのテーブルの名前が、文字化けと思われる現象で、dropしたいのですが、selectする時点で、テーブル名 dose not existsになります。

テーブル名は pg_class テーブルの relname カラムに格納されていますので、
そこを UPDATE しちゃえば任意のテーブル名に変更できそうな気はします。


手元ですぐ試せる PostgreSQL 8.4 系で実験してみました。

この辺は 7.3 でも同じだったような【曖昧な】記憶がありますので、
実行は own risk で…

------------------------------------------------------------------------

■もとのテーブル名が test3
# SELECT * FROM test3;
 id | hoge 
----+------
  1 | t
  2 | f
(2 行)


■pg_class の relname を UPDATE
# SELECT oid,relname FROM pg_class ORDER BY relname;
(snip)
 18653 | test
 18659 | test3
(snip)


■test3 テーブルを test4 に変更。今回はテーブル名が使いにくそうなので oid を指定。
# ustream=# UPDATE pg_class SET relname = 'test4' WHERE oid = '18659';
UPDATE 1


■test4 で SELECT
# SELECT * FROM test4;
 id | hoge 
----+------
  1 | t
  2 | f
(2 行)


■test3 は存在しなくなり、SELECT はできない
# SELECT * FROM test3;
ERROR:  relation "test3" does not exist
行 1: SELECT * FROM test3;

------------------------------------------------------------------------

;; ---------------------------------------------------------
;; 鈴木則夫 <suzuki @ tricorn.co.jp>
;; トライコーン株式会社 http://www.tricorn.co.jp/
;; 160-0015 東京都新宿区大京町24 住友外苑ビル5F
;; Tel 03-5919-0041 Fax 03-5919-0042


pgsql-jp メーリングリストの案内