postgres まとめ:テーブルやDBのコピーとか
2011/10/25
コンソールで使う
# DBに接続
$ psql テーブル名
$ psql テーブル名
#接続すると 「テーブル名=# 」というような感じの表記になる。
# クエリをなげる
テーブル名=# ~クエリ~
# DBを切断
テーブル名=# \q
テーブルのコピー
SELECT * INTO 新しいテーブル名 FROM コピーするテーブル名;
DBのコピー(バックアップ)
-
新規でDB作成。
コピー元のバックアップを取る(pg_dump)
新DBにバックアップを流し込む(pg_restore)
DBのコピー(バックアップ):同一サーバーでまとめてやる
バックアップをどこかに保存とかはせずに直接コピーする。
「新規でDB作成」→「コピー元のバックアップを新DBにバックアップを流し込む」
「元DB」を「新DB」にコピーする場合は下記のような感じ。
$ createdb -U postgres 新DB
$ pg_dump -U postgres -Ft -b 元DB | pg_restore -U postgres -d 新DB
$ pg_dump -U postgres -Ft -b 元DB | pg_restore -U postgres -d 新DB
特定のテーブルのみバックアップ
バックアップというより同じものを作るSQLを作って、新しいDBでそのSQLを実行。
「新規でDB作成」→「テーブルを指定してバックアップ用のSQLファイルを作成」→「新DBに作成したSQLファイルを実行してテーブルをコピー」
「元DB」の「テーブル」を「新DB」にコピーする場合は下記のような感じ。
$ createdb -U postgres 新DB
$ pg_dump -d 元DB -t テーブル名 > ファイル名.sql
$ cat ファイル名.sql | psql 新DB
$ pg_dump -d 元DB -t テーブル名 > ファイル名.sql
$ cat ファイル名.sql | psql 新DB
※「-d」はpostgresのバージョンが「8.4.1」では使えない、「8.1.22」では使える。
特定のテーブルのみバックアップ2
postgresのバージョンが「8.4.1」の場合。
他のバージョンは知らないけど多分これで大丈夫だと思う。
「新規でDB作成」→「テーブルを指定してバックアップ用のdmpファイルを作成」→「新DBに作成したdmpファイルをリストア」
「元DB」の「テーブル」を「新DB」にコピーする場合は下記のような感じ。
$ createdb -U postgres 新DB
$ pg_dump -Fc -c -t "テーブル名" 元DB > /ファイル名.dmp
$ pg_restore -d 新DB -v ファイル名.dmp
$ pg_dump -Fc -c -t "テーブル名" 元DB > /ファイル名.dmp
$ pg_restore -d 新DB -v ファイル名.dmp
※テーブル名にはワイルドカード使用OKみたいです。
日付型の比較
カラム「xxx」が昨日以前
xxx < CURRENT_DATE
xxx < CURRENT_DATE
カラム「xxx」が2011年10月24日以前
xxx < date '2011-10-25'