PostgreSQLこんなテーブルを作った
create table site_categories ( id bigserial primary key, site_name varchar(200) unique, created timestamp, update timestamp );
で、途中で名前を間違えていることに気づいた。サイトのカテゴリではなくて、サイト名を入れたかっただけだったから。
> alter table sites_categories rename to sites;
おk
んで、これでいけると思ったが。。。
このテーブルへの処理しようとすると応答が返ってこなくなった。
おかげさまでプロセスを切る方法を学んだ
$ psql -q -c'SELECT l.pid, db.datname, c.relname, l.locktype, l.mode FROM pg_locks l LEFT JOIN pg_class c ON l.relation=c.relfilenode LEFT JOIN pg_database db ON l.database = db.oid ORDER BY l.pid;' -d db_name pid | datname | relname | locktype | mode -------+---------+----------+------------+----------------- 28376 | db_name | pg_locks | relation | AccessShareLock 28376 | | | virtualxid | ExclusiveLock 28376 | | | relation | AccessShareLock 28376 | db_name | | relation | AccessShareLock 28376 | | | relation | AccessShareLock $ psql -q -c 'select pg_cancel_backend(${process_id})' -d db_name
で、何度切っても直らない・・・・。何故だ
と、テーブル一覧を確認したらちょっとハッとなった
=> \d List of relations Schema | Name | Type | Owner --------+--------------------+----------+--------- public | site_categories_id_seq | sequence | pg-user public | sites | table | pg-user (6 rows)
なるほど? xxx_seq
というテーブル?の名前は変わっていないっぽい
調べたらテーブルではなくsequence
と呼ばれる何からしい。
mysqlのauto incrementのようなふるまいをするserial型を指定してテーブルを作成すると一緒に作成されるらしい。
なるほど、処理はよくわからんが、こいつの名前も変えてやらないといけないじゃないかなとおもったわけで変える。
=> alter sequence site_categories_id_seq rename to sites_id_seq
これで不具合がなおった!!