YAMAGUCHI::weblog

噛み付き地蔵に憧れて、この神の世界にやってきました。マドンナみたいな男の子、コッペです。

PostgreSQL

MacPortsでPostgreSQLをインストールする

動機 SQLiteだけで開発行ってたけど、トランザクションの処理が面倒になってきたのでやっぱりRDBMSを入れることにした。使い慣れたPostgreSQLで。psycopgとのかねあいでバージョンは8.2。 手順 $ sudo port install postgresql82 (略) To use the postgres…

Cygwinにpsycopgをインストールする

動機 Django使う上でいよいよ運用サーバにアプリケーションを移そうと思ったけど,開発はCygwinでやりたいんでPostgreSQLとの接続ができないと困る. 方法 psycopgのソースを持ってくる.バージョンが1と2の二つあるけど今は2を使った方がいいみたい. 410 G…

PostgreSQL 8.3 リリース

PostgreSQL: The world's most advanced open source database いよいよリリースされましたね.新機能の一覧はこんな感じらしいっす. Heap Only Tuples BGWriter Autotuning Asynchronous Commit Spread Checkpoints Synchronous Scan "Var-Varlena" L2 Cac…

localhost外のホストから接続する

動機 ここ数日研究でPostgreSQLと戯れる日々が続いていましたが,いよいよここにきて1台のマシンでPostgreSQLのサーバ/クライアントをする段階から複数のクライアントを持たせてテストする段階になったんで,他のホストから接続できる様に設定しなきゃいけ…

テーブル内のカラム数の限界

研究でPostgreSQLを使っているのですが,どうもカラム数が増えるとテーブルができないというエラーが出てしまうので調べてみたら 404 - エラー: 404 あらら,250〜1600とは.これはテーブルを別に作らないといけないっぽいですね.めんどくさい.

ポート番号の設定にやられた

ローカルで開発しているアプリケーションをクラスタで走らせようと思ってソース移してビルドしていざ実行!と思ったらこんなエラーがでやがった. psql: could not connect to server: No such file or directory Is the server running locally and accepti…

配列内のデータと一致する行を探す

どうselect文書けばいいか知らなかったので,調べてみた. SELECT columns FROM table WHERE value = any(ARRAY_COLUMN) any関数を使えばいいらしい.ただ右辺に関数がくるのが気持ち悪い.やっぱり配列を使うくらいなら別のテーブルを用意した方がいいとい…

libpqxx & gccで遊んでみた その2

こんな感じのコードを書いてみた.ちょっとずつ使えそうな感じがしてきた.サンプルコードをひたすら読むに限る. /** @file test_libpqxx.cpp * @brief this file is test program using libpqxx2.6.9 * @author YAMAGUCHI * @date 2007.12.23 * @attention…

libpqxx & gcc で遊んでみる

libpqxx(PostgreSQLのC++用ライブラリ)を使ったメモ DownloadPage – libpqxx [pgsql-jp: 28187] Re: char varchar textについて 上記サイトからlibpqxx2.6.9.tar.gzを落としてきて展開しビルド. # tar xzf libpqxx-2.6.9 # ./configure --prefix=/usr # m…

CygwinでPostgreSQL8.0を動かす

動機 研究に行き詰まってきたので打開策としてRDBMSを導入することにしてみた. 方法 参照 CygwinにPostgreSQLをインストールするところから.これがまたはまりどころが多かった.やっぱりCygwinってWindowsで動いているだけあって結構面倒. Yahoo! GeoCiti…

再起動できない場合

postgresql.confの設定を書き換えたので再起動しようと思ったらなぜか出来なかった。いろいろ調べてみたが、意外と手こずってしまい苦労した。症状としては # pg_ctl restart postmaster successfully started upとは表示されるものの、実際はps aux | grep …

aptとtarball

今回立てたサーバに対する思想の一つとして「Debianの思想にのっとる」というのがあります。と書いてみると大仰ですが、単にaptやdpkgでパッケージを管理したいということです。*1 で、今回やりたかったのはRubyとPostgreSQLをつなぐruby-postgresというモジ…

configの確認

諸々のディレクトリはpg_configコマンドで調べることができます。 インクルードディレクトリ --includedir ライブラリディレクトリ --libdir など。詳しくはヘルプ参照。

月の初日を得る

ひさびさの投稿なので体裁を忘れていた。いかんいかん。 ある日付型のカラムを見たときに、月ごとに区切りたい場合がある。そういうときに比較としてその月の初日を持ち出す訳だけど、なかなかいい方法がない。そこでこんな方法を考えてみた。 to_date(some_…

部分フィールドの抽出

詳しくは書けないが、たとえば以下のようなテーブルがあったとする。 term_start date term_end date number intこのterm_startとterm_endをみて、case文をクエリに書こうとするときにdate型とinterval型を混ぜて演算させると、戻り値がinterval型になってし…

ストアドプロシージャ カーソルの利用

FOR IN SELECT文やFOR IN EXECUTE文などでループを回しているその中でさらにループを回したいときがある。そういうときにFOR文でエラーが出ることがあるのでカーソルを利用してループを作成するといい。 OPEN cursor FOR SELECT ... or OPEN cursor FOR EXEC…

ストアドプロシージャ FORループ

複数行の問い合わせ結果を扱いたい場合はFOR IN SELECT文やFOR IN EXECUTE文を用いればよい。 FOR record | row IN select_query LOOP statements END LOOP; FOR record | row IN EXECUTE sql LOOP statements END LOOP; statements内で結果を返したい場合は…

ストアドプロシージャ 文法(基本)

ストアドプロシージャの文法は結構簡単。 代入 var := value; 代入は:=で行う。イコールは比較演算子なので注意すること。 文字列 基本的には文字列はシングルクォーテーション2つでくくる。(全体をシングルクォーテーションでくくっているため)ただ、文…

ストアドプロシージャ 変数型

まず通常のSQL文でも用いる型の場合は var_name [CONSTANT] type [NOT NULL] [:= expression]; 定数ならCONSTANTオプション、初期値を設定するなら最後の様にあらかじめ代入をする。次にPL/pgSQLでの型は var_name table.column%TYPE; var_name table%ROWTYP…

ストアドプロシージャ 宣言

ストアドプロシージャ(ストアドファンクション)を作成するときはいったんファイルに作成して、コンソールで % \i 'FILE_PATH'とするのが吉。まず大枠として関数は以下のような形で作成する。OR REPLACEをつけているのは、関数を変更したときにいちいちDROP…

ローカル開発

ネットにつないでいないと開発できないってのは結構きつい。結構ネット環境がないところに遊びにいったりしてるしね。というわけで、自分のマシンにも入れてみました。PHPやApacheのバージョンい関してはちょっとわけあり。■環境 OS : WindowsXP Pro SP2 Apa…

ストアドプロシージャ

いよいよこいつを使わないといけない状況になってしまった。というわけで早速PL/pgSQL言語で関数を作成することに。と思ったらなんか ERROR: language "plpgsql" does not exist とか言って怒られた。どうやら調べてみるとコンソールからcreatelangというコ…

文字コード・改行コード

たとえばなんかのマスターテーブルを作成したいときにCSVファイルからCOPYコマンドを使って登録したいときがあるとする。そのときに注意しなきゃいけないのが文字コードと改行コードで、ExcelでCSVファイルを作成する場合、Macはどうか知らないけど、Windows…

クエリ中での演算

便利な演算があるらしい。 文字列連結 SELECT key, str1 || ',' || str2 as str_all FROM table 計算 SELECT key, value1 + value2 as total FROM table

多重の並び替え

テーブルで並び替えを多重に行いたいときはORDER BYを多重にかけてやればいい。 SELECT * FROM table ORDER BY column1,column2左から順に評価されていく。

ダンプ・リストア

ダンプ pg_dump -c DB_NAME -h HOST_NAME -U USER_NAME > FILENAME「DBに変更を加えたら必ずダンプしておけ!」 リストア psql DB_NAME -h HOST_NAME -U USERNAME < FILENAME「困ったらリストアしとけばいいんだ!」

テーブルの作成

テーブルの作成にはcreate tableを使う。 CREATE TABLE [table_name] ( [column1 type condition],[column2 type condition],...,CONSTRAINT [tag] [constraint]([column],[column],...)) 普通に作成するときはCONSTRAINT以下はあまり意識しないけど、複合主…

min,max,sumを複数使うとき

PostgreSQLでmin,max,sumを複数のカラムで使うときは min | min ----------- 1| 1 みたいにカラムの名前がかぶってしまう。そういうときは SELECT min(data1) as min_data1, min(data2) as min_data2 FROM table; とすれば min_data1 | min_data2 ----------…

よく使う命令 その3(CSVファイルの読み書き)

なんかちょこっと調べたらすぐに出てきたのでメモ。COPYコマンドを使うとCSVの読み書きが簡単にできるっぽいよ。 CSVをテーブルに取り込む COPY [table_name] FROM '[filename]' DELIMITER ',' テーブルをCSVに書き込む COPY [table_name] TO '[filename]' D…

よく使う命令 その2(ALTER系)

カラムの名前を変更したり、カラムの属性を変更したりするのはよくあることです。ということを今日知った。本当はDB設計は一番肝心なはずだからほいほい変えちゃいけないんだけど、実際にやってみないとわからないこともあるから仕方ないよね。 というわけで…