PostgreSQL

CREATE OR REPLACE LANGUAGE をシミュレートする

PostgreSQL で plpgsql を利用するには CREATE LANGUAGE する必要があるが、複数回実行すると2度目からエラーになってしまう。 "CREATE OR REPLACE" 的なことはできないかどうかググったところ、そのものずばりがかかれてあった。http://wiki.postgresql.or…

PostgreSQL のテーブル定義書を生成する

dbdeploy のようなDBマイグレーションツールを使っていると、テーブル定義は斬進的に更新されていくため、現時点のテーブル定義書をDB情報から生成したいと思うことは度々ある。(私の知識では、)テーブル名や各項目の型は取得できるが、それだけでは説明が足…

PostgreSQL で日本語全文検索

http://textsearch-ja.projects.postgresql.org/textsearch_ja.htmlPostgreSQL 8.3 から全文検索がサポートされた。日本語はデフォルトでは組み込まれていないため textsearch-ja をソースからインストールしてみた。Debian (squeeze) にて確認した。とりあ…

PostgreSQL で PL/PgSQL 関数が作成できない

PostgreSQL 8.3 の初期状態では CREATE FUNCION 時に、以下のようなエラーが発生した。 ERROR: language "plpgsql" does not exist以下のSQLコマンドを実行したところ、作成できた。 CREATE LANGUAGE plpgsql;

psql コマンドでパスワードを省略する

http://postgresql.jp/document/current/html/libpq-pgpass.htmlより、パスワードファイル ".pgpass" を作成する hostname:port:database:username:passwordパーミッションを設定 $ chmod 600 .pgpasspsql コマンドを cron などで自動実行する際に使える。

高速フェールオーバ機能

PostgreSQL 8.3 でウォームスタンバイの構築は簡単だけど、フェールオーバも機能させようとすると、途端にどうしたらいいか分からなくなる。ぐぐってたらヒットした、 「PostgreSQL 8.3 ウォームスタンバイ機能 (+ 独自モジュール) + Heartbeat」 で構成され…

PostgreSQL 8.3 の date_trunc を含む CREATE INDEX

今まで(<=7.4)大丈夫だったのに、8.3 になったら CREATE INDEX 時に "timestamp with time zone" なフィールドに対して、date_trunc 関数などを使うと、以下のエラーが発生してしまう。 ERROR: functions in index expression must be marked IMMUTABLEhttp:…

yum で CentOS 4 に PostgreSQL 8.3 をインストール

CentOS 4 に PostgreSQL 8.3 をインストールすることになった。http://a98.jugem.jp/?eid=344 より、/etc/yum.repos.d/CentOS-Base.repo を編集し、[base]と[update]のセクションに、 exclude=postgresql*を追加。http://yum.pgsqlrpms.org/reporpms/repovie…

SQL文で random stringを発生する方法

http://itpro.nikkeibp.co.jp/article/COLUMN/20051005/222300/?ST=oss&P=5 から引用。 乱数はrandom関数で作ることができる。テスト用にランダムな文字列を作るのは面倒そうだが,md5とrandomを組み合わせることによって,簡単に32文字までの任意の長さのア…

PostgreSQL 8.0.10 にて

ひぇええええ〜。 2007-02-01 04:21:32 JST [856] LOG: database system shutdown was interrupted at 2007-02-01 04:07:46 JST 2007-02-01 04:21:32 JST [856] LOG: checkpoint record is at 4A/AA4DD48 2007-02-01 04:21:32 JST [856] LOG: redo record is…

テーブルのデータ壊れる。

テーブル名 tablename(仮)のデータが壊れてしまった。 SQLを実行するとデータベースの接続が強制的に切られてしまう。 dbname=> select * from tablename offset 433974 limit 1; server closed the connection unexpectedly This probably means the server…

ファイルシステムの障害

悲しいことに PostgreSQL 8.0.x で運用している データベースのデータファイルが壊れてしまった。 database => select * from tablename; ERROR: could not read block 11269 of relation 1663/34452723/34812743: Success こうなると何もできません。バック…