Postgres

pg_stat_activityで現在発行中のsqlを見る

select * from pg_stat_activityで、現在postgresqlサーバーに繋いでるプロセス一覧と、そのプロセスが現在発行中のSQLを見ることが出来る ログが見れない状況、DB再起動も出来ない状況で助かる

postgres7.2ではalter table tablename alter column columnname not nullが使えない

途中でnot nullを外すことが出来ない 新たなテーブルを作り直してデータ移行しなければならない 7.3からはalter column not nullが使える

postgresを強制終了、強制再起動したい場合はpg_ctl stop -m fastで止める

テスト環境なんかで使う 一応ロールバックするが安易に使えない

postgresでtoo many clients alreadyが出た場合max_connectionsを上げるが、shared_buffersも上げないとpostgresを起動出来ない

postgresql.confにも書いてあるけど shared_buffersは、max_connections * 2でなければならない

ER図はDBを設計してから作るのではなく、ER図でDBを設計するべき

DB設計してからツールでER図を作って出来た資料は総じて分かりにくい

レスポンスが遅い画面はSQLを抜き出してexplainしてインデックスを貼る

インデックスは偉大だった

複雑なSQLのインデックスはexplainして確かめながら貼る

explainは基本

joinされたテーブルへのインデックスの貼り方

テーブル1 column1 column2 column3 column4 column5 テーブル2 columnA columnB columnC columnD columnE SELECT * FROM テーブル1 as 1 INNER JOIN テーブル2 as 2 ON 1.column3 = 2.columnA AND 1.column4 = 2.columnB AND 1.column5 = …

SQL文を整形し直してくれるDMLBreakerが素晴らしすぎる

改行なし1000文字以上のログ出力されたSQL文も これさえあれば一瞬で見やすくなる かなり時間節約に繋がりますWeb上で見やすいSQLに整形する「SQL整形ツール DML Breaker」

postgresのchar型(bpchar型)は固定長なので余白には空白文字が入る

固定長の型に任意の長さの文字列を入れることは出来ない

aggregates not allowed in WHERE (WHEREに許容されなかった集合)

aggregates → 集合

mysqlは素直、postgersは親切、sql serverは論外

mysqlは良いSQLに対してパフォーマンスが高いが 悪いSQLに対してはパフォーマンスが悪い postgresは悪いSQLに対してもなめらかに対応する sql serverは論外らしい

データベース界の神、ジム・グレイ

トランザクション処理 概念と技法 上 下 神の著書を読まなくてはならない

postgresのexceptは、sql1 except sql2だとするとsql1の中でsql2を含まない結果

sql1とsql2の結果のカラムは互換性が無ければならない

postgres.confで必要な時に必要な分だけメモリを割り振る

気を抜くとメモリが足りなくなってくるので メモリ節約術が身につく日々 ローカルテスト環境のpostgresは 必要な時に必要な分だけ動いてくれれば良いので ダンプ、リストアする時なんかはメモリ多めで起動 普通に使う時はメモリ少なめで起動する 起動時のパ…

postgresのreal型はエイリアスfloat4の単精度浮動小数点

real型というのを初めて触った

windows native postgresのチューニング

500Mのダンプファイルのリストアで windows postgres(8.3)が悲鳴を上げていたのでチューニングした postgres.confのshared_buffersを128MBに work_memのコメントアウトを外して2MBにしてみた shared_buffers = 128MB work_mem = 2MB 軽快になった 参考 wor…

postgresでテーブルの中身を空にするコマンドtruncate table テーブル名;

pgAdminのquery画面からでも打てる

ERROR: column does not exist at character 773で困ったらpgAdminのバージョンを上げる

postgresが8.3で、pgAdminが1.6だとDB開く度にこのエラーが出る pgAdminのバージョンを上げるとエラーが出なくなった

プログラムが標準でUTF-8を使うようになっている理由

その昔、古い漢字なんかは標準のEUC-JPで扱ってなかったけど マイクロソフトが古い漢字を扱える独自仕様のEUC-JPの文字コード表を勝手に作ってしまった なので、標準EUC-JPとマイクロソフト仕様のEUC-JPの間でエラーが起きてしまっている SHIFT-JISなんかも…

postgresで大量のデータをdeleteした後vacuumしないと容量は残ったまま

大量のデータをdeleteしてvacuumするなら 新たにテーブルを作成して、移行してリネームする方が早い

読み込み専用のテーブルは、clusterコマンドを使うと早くなる

インデックス基準で再整理する

テーブルにインデックスを30件作ったら、データが30倍出来る

create indexでインデックスを30件作った場合、管理するデータの量は30倍になる 爆速で検索や並び替えを行う事が可能になるが、 insert,deleteされるデータも30倍になるのでinsert,deleteに時間がかかる

This probably means the backend terminated abnormally before or while processing the request.

This probably means the backend terminated abnormally before or while processing the request. おそらくリクエスト処理中か処理前に、異常終了したことを意味します

FATAL 1: Missing or erroneous pg_hba.conf fileの場合、pg_hba.confに記述ミスがある

よく見たら何か文字が混入していたりする

pg_resetxlogを使うとpgdataが吹っ飛ぶ

postgres7.2でpg_resetxlogを唱えたらpgdataの中身が無くなっていた・・・ メガンテを唱える勢いで使わないと氏ぬ

postgres7.2で、xlogが壊れた時はpg_resetxlogを使う

※pg_resetxlogを使うとpgdataが吹っ飛ぶを先に読む事 /home/postgres% pg_ctl start DEBUG: open of /data/pgdata/pg_xlog/000000040000009D (log file 4, segment 157) failed: No such file or directory DEBUG: invalid primary checkpoint record DEBUG:…

postgres7.2でカラム名が大文字の場合、カラム指定をダブルコーテーションで囲む必要がある

patient table PID NAME select pid from patient Attribute not found pid select PID from patient Attribute not found PID select "PID" from patient 1 2 3 大文字小文字関係ないと思っていたけど 関係あった

古いlibpq.dllは全てのサーバに接続可能

PostgreSQLバージョン6.5に付属するlibpqの日本語Windows版バイナリです。今となっては少々バージョンが古いのですが、 PostgreSQLサーバはクライアントに対して上位互換性がありますので通常の使用では問題ありません。バージョン6.5以降の全てのサーバに接…

windows native postgresに外部から接続する場合はファイヤーウォールのポートを空ける

postgresql.conf pg_hba.conf の設定だけでは繋がらない、 ファイヤーウォールのポートを空ける必要がある※追記 postgres.confのlisten_addressesの変更を忘れている場合もある listen_addresses = '*' # what IP interface(s) to listen on;