usersというテーブルに以下のようなレコードがあった。
id | name
----------------------------------+----------------------------------
paul | Paul McCartney
pete | Pete Townshend
john2 | John Ryden
bob | Bod Dylan
john | John Lennon
bobの名前が間違っている。
Bob Dylanに直したい。
Excelあるいはテキスト感覚で直接テーブルを開いて書き換えたいところだが、
それはできない(よね?)
csvでエクスポートインポートできるようなのでやってみた。
monqy=# COPY users TO '/var/lib/pgsql/users.csv' WITH CSV DELIMITER ',';
COPY 5
出力先は当然ながら書き込み権限が必要で、書き込み先に権限を与える(postgresの)か、書き込み権限のある場所にエクスポートする。
さっきのBob Dylanを直してインポートしようとしたら
monqy=# COPY users FROM '/var/lib/pgsql/users.csv' with csv;
ERROR: duplicate key value violates unique constraint "users_pkey"
DETAIL: Key (id)=(paul ) already exists.
CONTEXT: COPY users, line 1
1件目の登録で already exists のエラーが。
上書きするオプションみたいなものは無いようで、一時的に作ったテーブルにインポートしてそこからupdateするとかいうことが必要らしい。
しょうがないので updateで更新。
monqy=# UPDATE users set name = 'Bob Dylan' where id = 'bob';
UPDATE 1
monqy=# select id,name from users;
id | name
----------------------------------+----------------------------------
paul | Paul McCartney
pete | Pete Townshend
john2 | John Ryden
john | John Lennon
bob | Bob Dylan
(5 rows)
更新後のテーブルを表示すると更新したレコードが最後になっている。
削除・登録になっているのか?