投稿者のアーカイブ

PostgreSQL9.0が正式リリースされたようですね
- 2010/02/21
- aikawa
- PostgreSQL

複数テーブルをまたいで重複しないIDを自動的に振る(PostgreSQL)
- 2010/02/07
- aikawa
- PostgreSQL
CREATE TABLE test(id serial, hoge text, primary key(id));
CREATE TABLE test2(id int default nextval(pg_get_serial_sequence('test'::text,'id'::text)::regclass), hoge text);
INSERT INTO test(hoge) VALUES('hoge');
INSERT INTO test2(hoge) VALUES('hoge');
INSERT INTO test(hoge) VALUES('hoge');
PostgreSQL8.1.9で確認。
testのidには1,3が、test2のidには2が入ります。
立っているclassは親でも使えと言う感じです。
デフォルト値にはcurrvalも使えますが、setvalで初期値を忘れずに。
普通に使う機会が無さそうなものばかりで。






文字コードの話(EUC-JP)
- 2010/02/07
- aikawa
大体知ってるという人も多いと思うので、概略だけ。
EUC-JPは拡張としてマイクロソフトが規定したCP51932と 日本ベンダ協議会が規定したeucJP-msが有ります。何が違うかと言うと
前者はJIS X 0212が無い、NEC選定IBM拡張文字が有る、ユーザ定義文字が入らない
後者はJIS X 0212が有る、NEC選定IBM拡張文字が無い、ユーザ定義文字が入る
と言う事のようです。
因みにブラウザではIEはCP51932のみ対応で、FirefoxやOperaは両方対応しているようです(表示に関して)。
で、またややこしい話ですが、これらの3ブラウザ全て送信時はCP51932らしいんですが
FirefoxだけはJIS X 0212をエンティティ化(数値文字列化って言うのかな)しないで送るので、Firefoxで送信した文字だけはFirefox以外で見ると文字化けする事があるという。
追記:今もそうなのか時間があれば調べたいと思います。
またSQLサーバではPostgreSQLとMySQLはeucJP-msですので、同じEUC-JPでも微妙に違う文字が送られて来る事を意識しないといけないんですね。
PHPでは5.2.1以降でしかeucJP-msは対応していませんので、中間処理もこれより前のバージョンでは手で修正が必要になるようです。
あとは他の文字コードからの変換で微妙に違う字体になったりする事もあるらしいです。
まぁ、SJISもEUC-JPも色々と問題があるんですが、UTF-8も問題が無いわけではないんですね。
その辺はサロゲートペアで調べれば出ると思います。対応アプリとかメモ帳でバックスペースとか。
間違いに関して、突っ込みお待ちしております。






PostgreSQLメモ
- 2010/02/06
- aikawa
- PostgreSQL
多分使わないメモ。
・カラム名column_nameのあるテーブルを探す。
select t.relname,c.attname,format_type(c.atttypid, c.atttypmod) from pg_attribute as c
inner join pg_stat_user_tables as t on(c.attrelid = t.relid)
where attname = 'column_name';
・テーブルとインデックスのサイズを確認する(ブロックサイズ*ブロック数)。
SELECT tablename,pg_relation_size(tablename::text) from pg_tables where tableowner != 'postgres';
SELECT indexname,pg_relation_size(indexname::text) as indexsize from pg_indexes where schemaname != 'pg_catalog';
・今ロックされているテーブルを調べる。
SELECT relname from pg_stat_all_tables where relid in(select relation from pg_locks) and schemaname != 'pg_catalog';




