X



Perl::DBI

■ このスレッドは過去ログ倉庫に格納されています
0195191
垢版 |
2006/02/24(金) 19:28:07ID:???
>>194

どういう意味でしょうか??
DBI::connect には option 属性がなかったので。
0197nobodyさん
垢版 |
2006/02/24(金) 22:51:21ID:???
少なくとも手元の環境ではconnect失敗でundefが戻ってきて処理は続くので、
環境やバージョンに依存した何かかね? PrintErrorを0にしないと、warningは
でるけど。あるいは書いてないけどどこかでRaiseErrorを有効にしてるとか?

% perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass",); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";'
DBI connect('host=aaa','user',...) failed: could not translate host name "aaa" to address: Name or service not known
at -e line 1
死んでない
dbh is undef

% perl -e 'use DBI; $dbh = DBI->connect("dbi:Pg:host=aaa", "user", "pass", {PrintError=>0}); print "死んでない\n"; print "dbh ", defined $dbh? "= $dbh": "is undef", "\n";'
死んでない
dbh is undef
0199189
垢版 |
2006/02/25(土) 21:19:30ID:???
>>197

ご指摘ありがとうございます!

RaiseErrorが有効になっていたので、
無効にしてみたらちゃんとキャッチできました…

なにかものすごい勘違いをしていたようです。

RaiseErrorを無効にしないとdieされるから
キャッチできないってオチですね。

大変失礼しました。
0200nobodyさん
垢版 |
2006/03/31(金) 09:14:29ID:3Vb6MUys
Class::DBIをつかってOracle9iにつないでいます。
ORA-01000が出るんですが、原因がわかりません。
常に出るわけではなく、なにをきっかけにしているのか
ずーっと悩んでいます。

Class::DBIを使った場合、カーソルが開く(もしくは閉じる)タイミングというのは
いつになるんでしょうか?

なにかヒントのようなものでもよいので
お願いします。
0201nobodyさん
垢版 |
2006/04/12(水) 16:46:12ID:Fg0UYczL
windowsでperlからdbi使ってpostgreSQLに接続しようとすると
perl command line iteratorが落ちてしまいます。
そしてMicrosoftへ連絡させられる・・・。
どのあたりに原因がありそうですか?
postgreにアクセスしないperlプログラムはちゃんと動くし、
pgAdminからならちゃんとpostgreSQLは機能します。
CPAN使ってDBIとDBD-Pgをインストールしました。

windowsでこの環境構築できた人居ますか?
0202201
垢版 |
2006/04/12(水) 17:35:44ID:Fg0UYczL
×Iterator
○Interpreter
0203nobodyさん
垢版 |
2006/04/16(日) 14:21:00ID:???
>>201

普通に
WindowsXP Pro + ActivePerl 5.6.1 + DBI 1.49 + DBD::Pg 1.21 + PostgreSQL 8.1.3
で動いてますが何か?

ちなみにDBD::Pgはppmで貰ってきたやつ。
0204nobodyさん
垢版 |
2006/04/16(日) 15:54:09ID:???
俺は
Windows2000 + perl 5.8.7 built for cygwin + DBI 1.50 + DBD::Pg 1.43 + PostgreSQL 8.0.7
だな。
0205nobodyさん
垢版 |
2006/04/17(月) 00:27:48ID:???
DBI 1.50にしようと思ったら

Perl versions below 5.6.1 are no longer supported by the DBI.
Perl versions 5.6.x may fail during installation with a complaint
about the use of =head3 in the pod documentation.

と言われてしまった。
そろそろ5.6は捨て時かな。
(他のモジュールでも「5.8以降じゃないからダメ」とインストールさせてもらえないのも結構増えてきた)
0206nobodyさん
垢版 |
2006/04/20(木) 16:26:10ID:???
DBIx::Classの話はここでいい?

ある行をselect ... for updateで行ロックかけつつ更新したいんだけどDBICで
for updateしつつデータを取得する方法がわからなくて困ってます。

どうすりゃいいの?

0207206
垢版 |
2006/04/26(水) 09:50:57ID:???
自己解決しました。

$rs->search_literal('id = ?) FOR UPDATE; --', $id);

search_literalは与えた文字列のまわりを括弧でくるんでくれるので、
FOR UPDATEの部分を外に出すために途中で括弧を閉じ、そのままだと
お尻の括弧が余るのでコメントにして無視させるというかなり強引な
トリックです。
0208nobodyさん
垢版 |
2006/04/27(木) 20:49:50ID:???
DBIの話題でいいのかなぁ?

データベースはSQLite。
よくある検索画面。1000件中の11〜20件目が2ページに表示されている。

というようなとき、limitやoffsetで取得行数を減らしてパフォーマンスを
あげることはよく行われていると思う。
だが検索にマッチした行が全部で何件かを知る必要がある。

limitをつけると、制限した行数しか返ってこないから
こういうときSQLを2回発行するしかないんかな?

order by してlimitしたりするとき、内部では何行あるか知っていると思うから、
SQL文にlimitつけてても制限されてない行数をしる方法がないかなぁと期待しているんだけど。
0209nobodyさん
垢版 |
2006/04/27(木) 21:28:39ID:???
>>208
DBIだからこうというよりはSQL一般の話なのでデータベース板の
それっぽい質問スレでで聞いたほうが知ってる人に当たる確率が
高いと思われる。
0210nobodyさん
垢版 |
2006/04/27(木) 22:25:15ID:???
うむ。ここは初心者板だし。
0211nobodyさん
垢版 |
2006/04/28(金) 07:36:40ID:???
>order by してlimitしたりするとき、内部では何行あるか知っていると思うから、
DBの実装によると思う。
逆に言えば、DBごとに行数を返したり返さなかったりすると思うから、その共通I/FであるDBIでは取得できないと思う。
素直にselect count(*)しなされ。
0212nobodyさん
垢版 |
2006/04/28(金) 07:52:56ID:???
実装によっては場合によっても違いそうだしな。
ちょうど都合のいいインデックスがあれば
頭からlimit数分順に拾うだけでいいかもしれない
わけだし。
0213nobodyさん
垢版 |
2006/04/28(金) 15:07:40ID:???
うむ。ここは初心者板だし。
0214nobodyさん
垢版 |
2006/05/02(火) 20:43:42ID:Hk7IzHit
時代はDBIx::Class!って事で
DBIxでLimit 4,10みたいなのできないんかねー
0215nobodyさん
垢版 |
2006/05/03(水) 00:22:54ID:???
>>214
pagerのことかな。直接limitしたいんだよというときにはかえってめんどくさいが。
あるいはsearch_literalで >>207 とおなじやりかたでlimitもつけられそう。
(試してはいない)
0216nobodyさん
垢版 |
2006/05/03(水) 05:32:14ID:???
DBIx::Class 系で、set_sql する方法きぼん。
compat とかわけわからなす。
0217nobodyさん
垢版 |
2006/05/08(月) 20:54:21ID:???
スレ違いだったらすみません。DB板から移動してきました。
Perl + Postgresqlのアプリをmysqlに移植しようとしています。
Postgresqlでは複数ステートメントを連結したSQLをDBIで渡して実行できてたのですが、
mysqlでそのまま渡すとSyntax Errorとなってしまいます。
cseというクライアントソフト経由でも同様の症状がありましたが「一括実行」という
Pstgresqlでは使ったことのない操作で複数ステートメントを順に実行できました。
Perlで実行するためには何か特殊な設定などが必要でしょうか。
宜しくお願いします。
0218nobodyさん
垢版 |
2006/05/10(水) 08:03:47ID:???
>>217
移植してやるから、ソースうp汁。
0219nobodyさん
垢版 |
2006/05/11(木) 17:46:04ID:???
DBに登録した画像バイナリを読み出して、Content-typeとContent-length指定で
ブラウザに表示させることはできたんですが…
これ、普通のhtmlと一緒に出す場合はどうするのでしょうか?
0220nobodyさん
垢版 |
2006/05/11(木) 18:06:33ID:???
>>219
httpがわかっていれば出来ない質問だな
0221nobodyさん
垢版 |
2006/05/11(木) 18:44:21ID:???
>220
mhtファイルを自前で生成するとか?(笑)
0222nobodyさん
垢版 |
2006/05/12(金) 02:10:33ID:???
辿る道のりは人それぞれなのね。俺なんてバイナリ型なんて扱ったことないし。
バイナリ出力するスクリプトの横に別のHTMLを作って、<img src="./hoge.cgi">
なんて書いてみよう。
0223nobodyさん
垢版 |
2006/05/16(火) 12:53:34ID:v8uyEVX5
DBI+MySQLでLIMITにプレースホルダが使えねぇぇぇ。

$dbh = DBI->connect( $dsn, $user, $password );
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT 0, 3' );
$sth->execute() ;

はOKだけど、

$i = 0;
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT ?, 3' );
$sth->execute( $i ) ;

とか、

$i = 0;
$sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' );
$sth->execute() ;

だと×。なして?
0224nobodyさん
垢版 |
2006/05/16(火) 13:54:23ID:???
- Class::DBI
- Class::DBI::Sweet
- DBIx::Class::Schema

お好きなのをどうぞ。
0225nobodyさん
垢版 |
2006/05/16(火) 14:21:49ID:???
>>223
> $sth = $dbh->prepare( 'SELECT * FROM companion LIMIT $i, 3' );

$sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" );

じゃないか?「'」 だと$iが展開されないぞ。
0226nobodyさん
垢版 |
2006/05/16(火) 22:54:16ID:???
> $sth = $dbh->prepare( "SELECT * FROM companion LIMIT $i, 3" );

そんな書き方してると、注入されますよ?
0227nobodyさん
垢版 |
2006/05/16(火) 23:51:19ID:???
いつからか忘れたけどDBD::mysqlがlimitの引数にplaceholder使えなくなったとおもう。
0228nobodyさん
垢版 |
2006/05/17(水) 03:02:32ID:???
プレースホルダで渡すときにクォートされるからこんなSQLになってる
LIMIT '0',3
ってかエラー吐いてるの見ればわかるでしょ?
0229nobodyさん
垢版 |
2006/05/17(水) 08:51:13ID:???
>>226
ギャグで言ってる?$iの汚染チェックするのは当然だろ。
オレは223の解釈が違ってるからレスしただけだ。
そもそも223の最後の例はプレースホルダ使ってないし。
0230228
垢版 |
2006/05/17(水) 10:09:25ID:???
俺なんか間違ってた?
0231nobodyさん
垢版 |
2006/05/18(木) 00:52:43ID:???
俺、PostgreSQL使ってるからシラネ。
0232nobodyさん
垢版 |
2006/05/31(水) 18:35:21ID:QUWCbat7
sjisをsjisのまんまMySQLに渡したいんですが、2バイト目が0x5cのマルチバイト文字
([\x81\x83\x84\x89-\x9F\xE0-\xEA][\x5C])で不具合がおこります。

十十十十 → 十十\十十\
十と一を足すと十一 → 十と一を足すと十\一

と2文字毎に\マーク(0X5C)が入ってしまいます。
これはDBI内部でのエスケープ時のバグでしょうか?

携帯電話用なのでなるべくSjisを使いたいという前提で、解決法がありましたら教えてください。
0233nobodyさん
垢版 |
2006/05/31(水) 19:02:06ID:???
>>232
内部処理はUTF-8かEUCでやって出入り口のみでSJISと変換する。
これが一番楽だと思う。内部処理をSJISでやるのはお勧めしない。
どうしてもやりたければ同じような変な現象があとからあとから出て
来るので、それととことん付き合う覚悟でどぞー。

0234nobodyさん
垢版 |
2006/05/31(水) 19:21:37ID:QUWCbat7
>>233
お返事ありがとうございます。
携帯電話ユーザーなので、当たり前に機種依存文字を使ってきます。
丸囲み数字や、絵文字など。
他文字コードに変換すると極めて都合が悪いのです。。

文字コード変換前にそれぞれ絵文字や機種依存文字をマッピングしてやればいいのかもしれませんが、
その労力も大変なものなので、どうしたものかと
0237nobodyさん
垢版 |
2006/06/01(木) 01:15:33ID:qUyEV8lX
>>236
auに対応してないですね。
絵文字のマッピングは途中までやってるので続きやってみようかな。
それと、機種依存文字か。

他にsjisからutf8に変換するときに注意するような文字ってありますかね?
Sjisに戻すという事を前提に。

\マークが全角バックスラッシュになるのは確認してるんですが。
0238nobodyさん
垢版 |
2006/06/01(木) 01:27:47ID:???
Encode-JP-Mobile ってーのは何だか使えそうだが、どうだろう?

0239237
垢版 |
2006/06/02(金) 08:48:32ID:o6QECWed
Encode::from_to( $string, "CP932","UTF8",Encode::FB_XMLCREF);
でIBM外字全部処理してくれるんですね。
こりゃ便利だ。。Encode使ってなかったよ(-o-;
0240nobodyさん
垢版 |
2006/06/02(金) 10:33:02ID:???
すでにスレ違いだけどEncode-2.13以降なら「FB_」はいらないらしいよ


> Encode 2.13以降ではfrom_toのfromの段階、すなわちdecodeの際にはcheckせずとにかくutf8化し、
> toの段階にあたるencodeの際にcheckを適用するという風にしたのですが、
> その結果、FB_(PERLQQ|HTMLCREF|XMLCREF)のFBが不要になったのです。
http://blog.livedoor.jp/dankogai/archives/50502791.html
http://kawa.at.webry.info/200605/article_11.html
0241nobodyさん
垢版 |
2006/06/12(月) 11:30:33ID:SMnZjb/v
Perlを触り始めたばかりなので、何がなんだかわかっていません。
DIBを使用したいのですが、以下のエラーが出てしまいます。

【ソース】
1 #!/usr/perl5/bin/perl
2 ##
3 ##
4 require "/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm";
5
6 @ary = DBI->available_drivers;
7 foreach (@ary){
8 print $_,"\n";
9 }

【エラー】
$ /usr/bin/perl test01.cgi
Can't locate object method "available_drivers" via package "DBI"
(perhaps you forgot to load "DBI"?) at test01.cgi line 6.

【環境】
Solaris9 + Oracle10g(10.1.0.3.0)

ご存知の方、ご指導よろしくお願いします。
0242nobodyさん
垢版 |
2006/06/12(月) 19:51:03ID:???
>>241

つーかなんでuseじゃなくてrequireで読んでるのよ。
(ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって)

#!/usr/perl5/bin/perl

use DBI;

foreach (DBI->available_drivers('TRUE')){
print "$_\n";
}
0243241
垢版 |
2006/06/13(火) 01:15:22ID:5fyA1E2s
>>242
レスありがとうございます。

>つーかなんでuseじゃなくてrequireで読んでるのよ。
Oracle10gのインストール時にインストールされた DBI.pm を使いたかったからです。
(以下の3箇所に DBI.pm が存在していました。)
A. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/Apache/DBI.pm
B. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/Bundle/DBI.pm
C. /u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/DBI.pm

>ちゃんとPerlのモジュール用のディレクトリにDBIインストールしろって
インストールというのは、どういうものなんでしょうか?

★インストール方法1
@INCに定義されているディレクトリの1つに、上記 B のディレクトリの内容を
全部コピーして実行。結果は、
Can't locate object method "available_drivers" via package "DBI"
(perhaps you forgot to load "DBI"?) at test01.cgi line 5.
でした。

※@INCにパスを追加する方法は、わかっておりません。
0244241
垢版 |
2006/06/13(火) 01:16:03ID:5fyA1E2s
続き

★インストール方法2
CPAN
http://search.cpan.org/~timb/DBI-1.51/DBI.pm
から DBI-1.51.tar.gz をダウンロード。
gnuの make と gcc をダウンロード&インストール。
http://www.sunfreeware.com/から libiconv-1.8 をダウンロード&インストール。
makeで失敗。
  make: *** [blib/arch/auto/DBI/DBI.so] Error 1
行き詰まりです。

「DBIインストール」は、こんなに複雑なものなのでしょうか?

やはり、Solaris9(Intel-32bit) + Oracle10g(10.1.0.3.0)の環境が災いしているとか・・・
0245nobodyさん
垢版 |
2006/06/13(火) 04:58:57ID:???
>>244
仕事でそんなレベルのことで悩んでるのなら、とっとと辞めればいいのに。
0246nobodyさん
垢版 |
2006/06/13(火) 08:05:43ID:???
>>244 DBI の問題ではなく、読み込んだモジュールを import していない
せいです。use は自動で import しますが、require はしません。

@INC を直接いじるのは最後の手段なので、lib pragma を使い、次の行を
を use DBI の前のどこかに入れてください。

use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/';

perl は、付属ドキュメントが充実しています。2ch などで質問する前に
perldoc を使うようにしてください。
0247241
垢版 |
2006/06/13(火) 13:38:38ID:5fyA1E2s
>>246
有難う御座います。
実行してみました。
上手くいっていません。
まだ、設定がいるのでしょうか?


【ソース】
#!/usr/perl5/bin/perl

use lib '/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris/';
use DBI;

#foreach (DBI->available_drivers('TRUE')){
#print "$_\n";
#}

【結果】
$ perl test01.cgi
ld.so.1: perl: 重大なエラー: 再配置エラー: ファイル
/u01/app/oracle/OraHome_1/perl/lib/site_perl/5.6.1/i86pc-solaris//auto/DBI/DBI.so:
シンボル perl_get_sv: 参照シンボルが見つかりません。
強制終了


>perl は、付属ドキュメントが充実しています。2ch などで質問する前に
>perldoc を使うようにしてください。
了解しました。手引き有難う御座います。
0248nobodyさん
垢版 |
2006/06/13(火) 23:19:05ID:???
>>246

> 重大なエラー: 再配置エラー: ファイル

そのDBIじゃなくて素直に
http://search.cpan.org/~timb/DBI-1.51/
のDBI使おうよ。
恐らく
/u01/app/oracle/OraHome_1/以下略
にある方はインストールまたはコンパイルに失敗しているんじゃない?
それと同名のモジュールで
http://search.cpan.org/~timb/
とは別物という可能性もあるでしょ。

インストール方法はREADME読め。
つーか読まなくとも
perl Makefile.PL
make
make test
make install
とする手順はほぼ全てのモジュールで変わらないっての。

ちなみにPerl 5.6.xだと警告(「5.6系列なんてもうサポートしてねーよ」)と出るからできればPerl 5.8.xにすることが望まれる。
5.6のまま使い続けたいのなら、警告無視してそのままインストールを強行するか、古いバージョンのDBIを落としてインストールすればいい。

> 了解しました。手引き有難う御座います。

了解したのに質問してるしw
0249248
垢版 |
2006/06/13(火) 23:20:07ID:???
ごめん。
間違えた。

>>246
>>247
0250241
垢版 |
2006/06/14(水) 10:29:26ID:EZ+xyelB
>>248
README読みました。
http://search.cpan.org/~timb/DBI-1.39/の結果】
※perlのバージョンは v5.6.1 built for i86pc-solaris-64int
$ make
/bin/sh -c true
/bin/sh -c true
/bin/sh -c true
cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\"
1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS Perl.c
cc: unrecognized option `-KPIC'
cc: language depend not recognized
cc: Perl.c: linker input file unused because linking not done
/usr/bin/perl -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int -I/usr/perl5/5.6.1/lib /usr/perl5/5.6.1/lib
/ExtUtils/xsubpp -typemap /usr/perl5/5.6.1/lib/ExtUtils/typemap -typemap typemap DBI.xs > DBI.xsc &
& mv DBI.xsc DBI.c
cc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xdepend -DVERSION=\"1.39\" -DXS_VERSION=\"
1.39\" -KPIC -I/usr/perl5/5.6.1/lib/i86pc-solaris-64int/CORE -DDBI_NO_THREADS DBI.c
cc: unrecognized option `-KPIC'
cc: language depend not recognized
cc: DBI.c: linker input file unused because linking not done
rm -f blib/arch/auto/DBI/DBI.so
LD_RUN_PATH="" cc -G DBI.o -o blib/arch/auto/DBI/DBI.so
cc: DBI.o: No such file or directory
cc: no input files
make: *** [blib/arch/auto/DBI/DBI.so] Error 1
$
0251241
垢版 |
2006/06/14(水) 10:34:10ID:EZ+xyelB
$ gcc -v
Reading specs from /usr/local/lib/gcc/i386-pc-solaris2.9/3.4.2/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.4.2

DBI-1.39 27 Nov 2003

perl敷居高い。
(゚∀゚)アヒャ!
0252nobodyさん
垢版 |
2006/06/14(水) 11:02:47ID:???
その程度もなんとかできない程度のスキルならインテル版Solaris使うのは
ちと荷が重いんじゃないかな... 仕事ならご愁傷様。
0253241
垢版 |
2006/06/15(木) 00:52:23ID:yyTHjJya
Solaris10のフルインストールでインストールされるgccとmakeを使っても結果は同じでした。
Solaris + Intel + 32bitの場合のOracleの選択肢は、Solaris9 + Oracle10gの
組み合わせしかないし、Solaris10のZFSを使いたいと思っているので、
素直にphp + MySQLを使う方がストレートのような気がしてきました。
0254nobodyさん
垢版 |
2006/06/15(木) 12:00:42ID:???
こんな仕事されてたら正直きついな
0255nobodyさん
垢版 |
2006/06/15(木) 12:54:23ID:???
ちゃんとした技術のあるところへ再委託したほうがいいよ。
で、出来た時間でじっくりお勉強。
0256nobodyさん
垢版 |
2006/06/15(木) 17:16:06ID:???
まあまあ、よくハマル話なんで、愚颶ると結構出てくることだから。
ただ、エラーメッセージちゃんと読まずに問題を切り分けられないからって、
DBI に文句言うのはメ。

ヒント: gcc の -fPIC に当るのが SUN謹製 cc の -KPIC。Perl は寂しがり屋
だから自分とおそろいのコンパイラが好き。
0258241
垢版 |
2006/06/17(土) 12:52:26ID:1OdBlA+4
皆様ありがとうございました。
申し訳ないのですが php + MySQL で問題無く構築できました。
0260nobodyさん
垢版 |
2006/06/17(土) 19:28:34ID:???
このスレ親切だな・・・
0261nobodyさん
垢版 |
2006/07/15(土) 01:20:13ID:???
ッッッッッッッッッッッッッッッッッッッッ〜〜〜!!!
ば・・・ばかな!
DBD-Pgをインスコできねぇ・・・ググっても該当するものがでてこねぇ マジやべぇか(ry

DBD-Pg-1.49のmakeで下記の警告が出ます。
ご教授おねがいします。
-----------------------------
dbdimp.c: In function 'dbd_bind_ph':
dbdimp.c:1656: 警告: value computed is not used
quote.c: In function 'quote_string':
quote.c:44: 警告: value computed is not used
quote.c: In function 'quote_geom':
quote.c:79: 警告: value computed is not used
quote.c: In function 'quote_path':
quote.c:108: 警告: value computed is not used
quote.c: In function 'quote_circle':
quote.c:137: 警告: value computed is not used
quote.c: In function 'quote_bytea':
quote.c:174: 警告: value computed is not used
quote.c: In function 'dequote_bytea':
quote.c:329: 警告: value computed is not used
----------------------------------------

PostgoreSQL 8.1.4をインスコして起動済みです。
DBI-1.51をインスコ

↓工程
su - postgres
export POSTGRES_INCLUDE=/usr/local/pgsql/include
export POSTGRES_LIB=/usr/local/pgsql/lib
perl Makefile.PL
make
0262nobodyさん
垢版 |
2006/07/15(土) 20:03:51ID:???
>261
警告だけなら問題はないはずだが。
0263nobodyさん
垢版 |
2006/07/16(日) 03:41:39ID:???
>>262
レスアザース
一通りmake installをして下記トレース(****はふせたいヶ所)を実行してみました。
----------------------------------------------
#!/usr/bin/perl
use DBI;
use constant DBNAME => 'DBI:Pg:dbname=****';
use constant DBUSER => 'postgres';
use constant DBPASS => '****';
DBI->trace( 2, '/home/postgres/public_html/dbi_trace.log');
DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 });
print "Content-Type: text/plain\n\n";
print $DBI::errstr? $_: 'Done';
----------------------------------------------

結果(dbi_trace.log)
--------------------------------------------------
DBI 1.51-ithread default trace level set to 0x0/2 (pid 5346)
-> DBI->connect(DBI:Pg:dbname=tottoDB, postgres, ****, HASH(0x8eabc28))
-> DBI->install_driver(Pg) for linux perl=5.008008 pid=5346 ruid=0 euid=0
-- DBI::END
--------------------------------------------------

DBD::PgのVersionなど詳細をはきだす前にENDされています。
0264263
垢版 |
2006/07/16(日) 03:45:23ID:???
ふせたいヶ所が結果でバッチリ見えてるとか
オレっておちゃめw
0265263
垢版 |
2006/07/16(日) 17:19:42ID:???
ぐっすり睡眠をとってからmake uninstallで指定されているファイルをrm -fして
再インスコしたらDBD::Pgが動作しました。

/usr/local/pgsql/lib/libpq.so.4 のシンボリックリンクを
/usr/lib/libpq.so.4 に作った事が吉とでたようです。

ちなみに>262の言う通り警告は問題なかったようです。
0266nobodyさん
垢版 |
2006/07/28(金) 18:07:16ID:qH9kRSG5
環境は、mod-perl+MySQL+qmail+vpopmailで、vpopmailのユーザー管理はMySQLにしています。

perlでメールアカウントを作成するにはどうしたらよいでしょうか?

やりたい事は、セカンドメールサービスのようなもので、
登録したユーザー同士でセカンドメールを与えるという物です。

user_a@hotmail.comにid_a@mydomain.com
user_b@hogehoge.comにid_b@mydomain.comを与え、

user_a@hotmail.comからid_b@mydomain.comに送られたメールを
id_a@mydomain.comからuser_b@hogehoge.comに転送するような感じです。


現在はSubjectに送りたい方のidを入力してもらって、recept@mydomain.comを窓口にして転送してます。
もっと簡易なシステムを作りたくご相談します。

こういう場合、メールアカウントを作る必要もないのでしょうか?
0267nobodyさん
垢版 |
2006/07/28(金) 20:17:11ID:???
>266
それDBIの問題じゃないだろ。
0268nobodyさん
垢版 |
2006/08/28(月) 17:49:49ID:???
スマソ。DBICについての質問をココでさせて貰っても良いだろうか
CatalystでWebアプリを作っていて、思いっきりモデルで躓いている

CREATE TABLE TblDiary(
parano int4
order_no int4
belong_dno int4
have_illustno int4
PRIMARY KEY(parano));

CREATE TABLE TblIllust(
illustno int4
illust_name text,
PRIMARY KEY(illustno));

上記の「TblDiary」と「TblIllust」という2つのテーブルがあって、
TblDiary.have_illustnoとTblIllust.illustnoをJOINTさせたい
このとき

my $table = $c->model('DBIC::TblDiary');
$table->has_one('illust_bind' => 'Test::Model::DBIC::TblIllust', 'illustno');
my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);

と書いているんだが、これだとTblDiary.paranoとTblIllust.illustnoがJOINTしてしまうんだ・・・
(一応、それ以外のところは思っているとおりにデータが取れている)
これを、本来望んでいるTblDiary.have_illustnoとTblIllust.illustnoの
JOINTにするにはどうすれば良いのか、誰か教授して貰えないだろうか
0269nobodyさん
垢版 |
2006/08/28(月) 17:53:16ID:???
あ〜、うまくインデントできなかった・・・

見辛い文体で申し訳ないorz
0270nobodyさん
垢版 |
2006/08/28(月) 20:45:48ID:???
周り見ていると、質問者はみんな丁寧語だ・・・
こちらもスマンかった

とりあえず、DBICについてはスレ違いかもしれないので
初心者板でも行ってきます

【初心者】 λ......
0272nobodyさん
垢版 |
2006/08/28(月) 23:09:48ID:???
>>271
レスありがとうございます。
えっと、申し訳ないですが、そこはすでに拝見させて貰いました・・・
(かなり詳しく書かれており、非常に重宝させて頂いています)

リレーションですが、モデルのファイルに設定を書き込まずに
Catalystのコントローラーにて書きたい点と、
TblDiaryが主キーのカラムじゃない点で頭を悩ませています

説明不足で申し訳ありませんでした。
かなりググったのですが、探し方が足りないのか
未だにネットでは見つからずにいますorz

実際にCatalystを使っておられて、CDBIを使用されている方は
おられるでしょうか?
0273268
垢版 |
2006/08/28(月) 23:18:44ID:???
う〜ん、すみません
説明がヘタで申し訳ないです・・・

主キーではないTblDiary.have_illustnoと連結させたいので、
このhave_illustnoというカラムを何らかの方法で
illustnoというカラムとリレーション指定を行いたいです
(このままでは、主キーのカラムであるTblDiary.paranoと連結してしまいますので)

希望するhave_illustnoへと連結できるよう、どのようにコントローラーに
指示を送れば良いのかが分からないです。
0274nobodyさん
垢版 |
2006/08/28(月) 23:21:10ID:???
>>272

CDBIを使用されて(×)
DBICを使用されて(○)

・・・間違えました
0275nobodyさん
垢版 |
2006/08/29(火) 00:25:18ID:???
リレーションの設定はモデルでやれってば。
コントローラでやる理由は?
0276nobodyさん
垢版 |
2006/08/29(火) 01:34:48ID:???
>>275
レスありがとうございます。

コントローラに記述する理由ですが、今後テーブルの個数が大きく増減する可能性があり、
モデルを全削除して、再度CatalystのヘルパースクリプトでDBの構造から
モデルファイルを自動作成するかもしれないからです。
ヘルパースクリプトを使わず、変更の度に対応するCatalystのモデルファイルを
手動で追加・削除したりしても良いのですが、どうしてもミスがありますので・・・

こちらは希望ですので、モデルに書くしか実現できないようでしたら諦めたいと思います。
ただ、モデルに書いた場合でも片方のテーブルが主キー以外のカラムと連結できず、
ハマり状態から抜けられずにいます。

モデルにリレーションを書く方法も平行して試行錯誤してみます。
0277nobodyさん
垢版 |
2006/08/29(火) 02:11:16ID:????BRZ(1020)
あっちにも書いたし、もしかしたら引用ミスかもしれないけど
こうじゃなくて

my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);

こうじゃないのかな

my $records = $table->search(
 {
  belong_dno => $dno
 },
 {
  order_by => 'order_no',
  prefetch => [ 'illust_bind' ]
 }
);

2chは半角スペースが詰められちゃうから
書き込むときは全角でインデントするといいよ
0278nobodyさん
垢版 |
2006/08/29(火) 04:13:08ID:???
>>276
それなら DBIC::Schema 使えばいいんじゃないかな。
0279nobodyさん
垢版 |
2006/08/29(火) 09:36:54ID:???
>>276

package MySchemaClass;
use base qw/DBIx::Class/;
# 自動生成


package MyController;
use MySchemaClass;
MySchemaClass->belongs_to(...);
0280nobodyさん
垢版 |
2006/08/29(火) 15:58:11ID:???
>>277 >>278 >>279
レスを頂きましてありがとうございます。

>>277
ご教授ありがとうございました。
prefetchはorder_byと同じ第2引数に記述するのですね。
今まで第3引数として書いても動作していたのは、
DBICの方で良きに計らってくれたのかもしれません・・・
ただちに直させて頂きました。
インデントの件も御指摘ありがとうございます。
以後気をつけて書き込みさせて頂きます。
0281nobodyさん
垢版 |
2006/08/29(火) 15:59:24ID:???
>>278 >>279
なるほど、DBIC::Schemaを使用すれば、問題とならないのですね。

Catalystを使う上でもDBIC::Schemaが推奨させているようですので、
私もこちらを非常に使いたいのですが、未熟なため、
DBIC::Schemaを使用してCatalystのヘルパースクリプトを立ち上げられずにいます。

こちらのサイトを参考にして試してみたのですが
http://en.yummy.stripper.jp/?eid=362958

>script\lc_create.pl model DBIC DBIC::Schema Lc::Schema create=static DBI:Pg:mydb user pass
とプロンプトからヘルパースクリプトを起動させると

>Can't locate object method "use" via package "DBIx::Class::Schema::Loader" (perhaps you forgot to load "D
BIx::Class::Schema::Loader"?)

『もしかしてDBIx::Class::Schema::Loaderをロードし忘れているんじゃないか?』と指摘されてしまいました。
該当場所まで言って、useでロードして見るものの、

>Can't locate object method "use" via package "DBIx::Class::Schema::Loader"
うしろの( )指摘がなくなっただけでして、現在はこちらで立ち止まっている状態です。

推奨されるDBIC::Schemaには切り替えたいですので、今から引き続き挑戦して参ります。
(何か大ポカをやらかしていそうな気がします・・・)
0282nobodyさん
垢版 |
2006/08/29(火) 16:02:25ID:???

非常につまらないことが原因で本当に申し訳ないのですが・・・orz
>>268の件、ようやく望む通りの動きをするコーティングができました。

my $table = $c->model('DBIC::TblDiary');
$table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno');
my $records = $table->search(
 {
  belong_dno => $dno
 },
 {
  order_by => 'order_no',
  prefetch => ['illust_bind']
 }
);

「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。

お見苦しい質問をいたしまして、本当に申し訳ございませんでした。
レスを頂いた皆様に、心より御礼申し上げます。
0283nobodyさん
垢版 |
2006/08/29(火) 19:52:13ID:???
おっさんさ、いいかげんにしたほうがいいとおもうよ。
0284nobodyさん
垢版 |
2006/08/29(火) 20:56:33ID:???
オマエもな

クダらん煽りいれるな
0287nobodyさん
垢版 |
2006/10/31(火) 14:14:04ID:WVctgpP6
CatalystでDBIC使ってフォームからの値を一発でアップデート、クリエイトできますか?
以下やってみたけど、エラーとなりまうす
my $result = $c->form;
my $userdata = $c->model('HOGE')->find(uid => $uid);
$userdata->update($result);

あほなのでフォームの値をいちいちハッシュに入れてからじゃないとうまくできないです。
良い方法あったらおしえてください。
0289nobodyさん
垢版 |
2006/10/31(火) 14:39:43ID:???
ちょっと伝わらなかったかもしれません。 ごめんなさい。

$userdata->update($result);
これ$resultは$c->formなんですが、これだとエラーになるんですよ。
DBIx::Class::InflateColumn::update(): No such column _records
いちいち $c->req->param('hoge1')をハッシュに入れて、update(\%hoges)とすればうまくいくんですけど
いちいちハッシュにいれなくても良い方法ないですかね。
0290nobodyさん
垢版 |
2006/10/31(火) 14:55:03ID:???
>>289
$c->formはCatalyst::RequestオブジェクトだからいきなりDBICのupdateに
わたしてもそりゃだめだろう。渡すとすれば$c->form->paramsじゃないか?
チェックはちゃんとしてあるのが前提だけどな。
0291nobodyさん
垢版 |
2006/10/31(火) 16:08:20ID:???
$c->form->paramsはだめでした。
http://search.cpan.org/~jrobinson/DBIx-Class-WebForm-0.02/lib/DBIx/Class/WebForm.pm
これためしてみましたが、CatalystのDBICに
__PACKAGE__=>config(additional_base_classes => 'DBIx::Class::WebForm');
入れてみたけど
$userdata->update_from_form($result);
で Can't locate object method "update_from_form" とでてしまう...

0292nobodyさん
垢版 |
2006/10/31(火) 16:16:50ID:???
>>291
$c->form->paramsが返すハッシュリファレンスの中身は期待しているもの
だったのか確認したのか?

update_from_formはクラスメソッド。使い方がマニュアルと違うじゃん。
0293nobodyさん
垢版 |
2006/11/07(火) 13:24:16ID:oWVVtuaP
DBI使ってtextファイルの中身をpostgresのtext型のフィールドに突っ込みたいんですが、
ファイルの中身は変数に一度突っ込んでから
$sth->execut($text);
する方法しかないのでしょうか?
メモリの使用量が心配なんですが、他に良い方法はありませんか?
0294nobodyさん
垢版 |
2006/11/07(火) 14:26:05ID:???
メモリが心配になるくらいでかいテキスト、突っ込んだあと
どうやって利用するんだ?
取り出すときもメモリの心配するのか?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況