PostgreSQL

シーケンス権限一括変換用SQL生成

生成したSQLを一括実行で、シーケンスのオーナーが変わる SELECT 'ALTER SEQUENCE ' || relname || ' OWNER TO new_role_name;' FROM pg_class c LEFT join pg_user u ON c.relowner = u.usesysid WHERE c.relkind = 'S' and usename = 'old_role_name' orde…

table lock

begin; LOCK TABLE table_name IN EXCLUSIVE MODE; UPDATE... commit or rollback; commit or rollbackするまで、他からtable_nameにアクセスがあった場合は 待ち状態となる。参考:http://www.postgresql.jp/document/8.1/html/sql-lock.html

ポスグレを再起動しなくてもconfの設定を反映できる

conf reload???

CSVデータをテーブルにインポート

COPY テーブル名 FROM 'CSVファイルの絶対パス' CSV; 例:hogeテーブルにhoge.csvをインポート COPY hoge FROM '/home/postgres/data/hoge.csv' CSV; ※インポート時に何度もエラーを出した場合は最後にバキューム処理を忘れずに。 (メモリを喰うため)

データ入れ替え

posygresqlのデータの入れ替えはPostgresでログイン #su - postgres DBの削除 dropdb ag2 createdb -E EUC-JP -O ag2 ag2 リストア psql -U ag2 pg_dump_xxxx ダンプファイルは通常gz圧縮なので gunzip pg_dumpxxx.gz で解凍します。

実行計画と実行分析

SQL文が実行される時に、内部でどのような処理が行われているのかを見るには 「EXPLAIN」コマンドと「EXPLAIN ANALYZE」コマンドがあります。 「EXPLAIN」はデータベースエンジンがどのような処理を行おうとしているのかという「実行計画」を、 「EXPLAIN AN…

setvalと、ALTER SEQUENCE

■シーケンスの値を指定した値でリセットする select setval('[シーケンス名]',値); ↓このやり方もある。違いはない。 ALTER SEQUENCE [シーケンス名] RESTART WITH 値; RESTART WITH start句は、シーケンスの現在値を変更します。この句は省略可能です。これ…

psqlログイン時にLinuxコマンドを叩く方法

\! less /var

timezone型から、時間だけ取得

select date_part('hour', timestamp '2001-02-16 20:38:40') 分の時は、'min'

ログ&設定確認

Postgresログ /var/log/pgsql とか /var/lib/pgsql/data/pg_log Postgres設定 /data/pgsql/data/postgresql.conf

シーケンス列を作成

postgres シーケンス列を作成する場合は、型に serial をつける

PL/pgSQL使用可能チェック

標準インストール状態では、PL/pgSQL は使用できないようである。create function の language 'plpgsql' で、次のエラーが出るときは、createlang されていない可能性がある。 Unrecognized language specified in a CREATE FUNCTION: 'plpgsql'. Pre-insta…

テーブル単位のVACUUM

/usr/local/pgsql/bin/vacuumdb -v -z -d ag2 -t テーブル名

postgres バージョン別ドキュメント

http://www.postgresql.jp/document/

GIN INDEX

postgres8.2からの機能 Integerには絶大な効果があるが、CHARには効果は薄いらしい。

SQL実行結果のファイルエクスポート

SQLの結果を、画面出力ではなく、ファイルへ出力する $ psql -d dbname -U id -p passwd # \o ./file.log # select * from table; # \q $ view file.log

SQLファイル実行

psqlコマンドでDBにログイン後、 サーバに在るSQLファイルを実行する $ psql -d dbname -U id -p passwd # \i ./file.sql psqlコマンドからは、-f まぎらわしーなー $ psql -f ./xxx.sql -U ag2 -h 192.168.0.0