db

SQL::Abstract で LIKE の ESCAPE を指定する

正規表現でいう ^a_c.* みたいなのをひっかけようと思って, my ($sql, @binds) = SQL::Abstract->new()->select( # table 'foo', # fields [ '*' ], # where { id => { LIKE => 'a_c%' }, }, ); みたくやると,a_code だけでなく abc もマッチしてしまう罠…

DBI で printf オレオレ流

Kazuho@Cybozu Labs: DBI::Printf - A Yet Another Prepared Statement を読んでおもしろ,と思ったんですが,どうもこれを prepared statement と呼ぶことに抵抗感があった*1のでコメントしたら,丁寧にコメントを返してくださいました。感謝感謝。で,お礼…

DBIC::Schema で昔やっていたこと

Yappo さんのYappoLogs: DBIx::Class::Schemaの使い方 を読んで,空気を読まずに自分語りしたくなったので書きます。最近めっきり DBIC 使っていないんで*1アレですが,make_schema_at とか知らない(というかおそらく存在しなかった)時代にやっていた方法…

SQLite が unable to open database file で困った

データベースファイルはちゃんと httpd から読み書きできるようにしてるのに!いろいろやってたらどうも読めるけど書けない,ということに気づきました。も,もしや,と思って「データベースファイルを置いてあるディレクトリ」の書き込み属性を on にしたら…

DBIx::Simple で count したい

SQL::Abstract が存在すること前提ですけど sub DBIx::Simple::count { my ($self, $table, $fields, $cond) = @_; if (ref $fields eq 'ARRAY' && @$fields == 1) { $fields = $fields->[0]; } $fields = '*' if ! defined $fields || ref $fields; my $res…

DBIx::Simple で UTF8Columns したい

しつこく DBIx::Simple を使っていきますが,使っていて困ることの一つは DB から取得したデータが octet stream のままであること。もちろんモデルクラス(DB へのアクセサ)で面倒をみてやればいいのですが,DBIC とかモダンなものだと DBIx::Class::UTF8C…

O/R マッパ流 DBIC でのアップデート

まあ、普通。こんな感じかと。my $member = $self->model('Member')->search({ email => 'nekokak@hogehoge.hoge' })->first; $member->update({name => 'nekokak'});の「普通」にひっかっかったんで。 $member->name('nekokak'); $member->update();のほう…

SQL::Abstract かしこす

以前「DBICで本当に困ったら SCALAR REFERNCE を使え - daily dayflower」にて, DBIC で WHERE field1 IS NOT NULL な検索をしようと思って, …… $resultset->search({ field1 => \'IS NOT NULL' }); とか書いていたんですが, $resultset->search({ field1…

DBIC 0.7 で has-many な nested multi-step prefetch がうまくイカネ

'author' has-many 'books' 'book' has-many 'chapters' みたいなありがちな DB で 2 authors each author has 2 books each book has 3 chapters みたいなテーブルを作ってMulti-step-prefetch をためしてみたんですけど, my @authors = $db->resultset('a…

MySQL と PHP の文字エンコーディング

「skip-character-set-client-handshake」で検索すれば情報多数*1 ↑のオプションがうまく働くのは,下記のエンコーディングが一致する時 MySQL のエンコーディング MySQL データベースのエンコーディング*2 PHP で扱う文字列のエンコーディング 統一されてい…

DBIx::Simple と SQL::Abstract::Limit

なんちゃってマッパ DBIx::Simple DBIC などの O/R マッパを使うほどじゃないけど DB 操作で楽したい,という場合には tomi さんも御推薦の DBIx::Simple があります。tomi さんもお書きのように結構致命的なバグ(その1,その2)が放置されているのが悲しい…

DBDesigner 4 の sqlt パーサを書いてみる(挫折編)

Rails だと DBDesigner 4 の吐く XML ファイルから model 等を生成するプロジェクトがあったりします*1が,Perl(Catalyst 等)にはありません。キー,クヤシイ!くやしがっていても仕方ないのでどう実現するか考えましょう。Perl だと様々なスキーマソース…

PostgreSQL での副問い合わせ等々

少なくとも ver. 7 の世代では IN を使った副問い合わせは遅いので EXISTS を使うべし http://www.stackasterisk.jp/tech/dataBase/postgresTuning02_02.jsp http://itbtech.itboost.co.jp/inst/inst_33.php EXISTS 等集約関数について http://www.postgresq…

pg_restore で --table オプションを指定しないほうがよい

db

% pg_dump -Fc -t my_table -Z 9 -U dbuser mydb > my_table.dumpみたいにテーブル単位で圧縮ダンプしたデータを,念のために,と思って % pg_restore -c -Fc -t my_table -U dbuser -d mydb my_table.dumpとしたら,インデックスが復帰されないわ GRANT の…

各データベースでテーブル定義を見る

db

テーブルのスキーマをたしかめる際は,たいがい CSE か phpMyAdmin や phpPgAdmin を使っています。ですが,コマンドラインで確かめようと思って,あれ〜覚えてない〜困った〜となったので,自分がよく使うデータベースシステムについて調べてみました。 SQL…

PostgreSQL の SERIAL型

参考 URL http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html#item4.11.1 http://www.postgresql.jp/document/pg814doc/html/datatype.html#DATATYPE-SERIAL http://www.postgresql.jp/document/pg814doc/html/sql-createsequence.html 1. はイントロダ…