perlからDBIを使用したpostgresへの接続でエラー

このQ&Aのポイント
  • perlからDBIモジュールを使用してpostgresデータベースに接続しようとすると、エラーが発生します。
  • エラーメッセージによると、データベース「mscdb」が存在しないとのことですが、実際には存在しています。
  • 原因を特定するために、perlバージョン5.8.2とpostgresバージョン8.1.2を使用しています。
回答を見る
  • ベストアンサー

perlからDBIを使用したpostgresへの接続でエラー

perlからDBIを使用して、データベースにアクセスしたいと思っていますが、connectで下記のようなエラーが出力され接続できません。 ↓↓↓↓↓↓apacheのエラーログ↓↓↓↓↓↓↓ DBI connect('dbname=[mscdb]','[postgres]',...) failed: FATAL: database "[mscdb]" does not exist at /web/member/cgi-bin/dbitest.pl line 8 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ mscdbがないとエラーが出力されているように思いますが、mscdbは存在します。どういった原因が考えられるでしょうか? プログラムには以下のように記述しています。 #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=[mscdb]'; use constant DBUSER => '[postgres]'; use constant DBPASS => '[××××]'; DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; 環境は以下の通りです。    perl v5.8.2    postgres v8.1.2 vine linux dbd v1.49

  • Perl
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • agharta
  • ベストアンサー率52% (54/103)
回答No.1

postgresqlのpg_hba.confにてどのような接続形態を許可していますか。 また、postmasterの起動オプションはどうなっているでしょうか。

hahihuke
質問者

補足

(1)pg_hba.confは、以下のようにしています。  Webサーバと、DBサーバは同一のマシンに格納していますので、localhostからの接続は、許可しました。 # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust host all all 192.168.1.0/24 trust host all all 192.168.3.0/24 trust host all all 192.168.4.0/24 trust host all all 127.0.0.1 255.255.255.255 trust (2)postgresは、マシン起動時にあがるようにinit.dに以下のようなファイルを置き起動しています。 #!/bin/sh # # PostgreSQL start and shutdown script # # chkconfig: 345 90 11 # description: PostgreSQL start and shutdown script . /etc/init.d/functions case "$1" in start) su - postgres -c "pg_ctl -l /usr/local/pgsql/log/log${$}.txt -D /usr/local/pg sql/data/ -o \"-S -i\" start" touch /var/lock/subsys/postgres ;; stop) su - postgres -c "pg_ctl stop -D /usr/local/pgsql/data/ -m fast" rm -f /var/lock/subsys/postgres ;; *) echo "Usage: /etc/rc.d/init.d/postgres {start|stop}" esac

その他の回答 (1)

回答No.2

もしデータベースの名前が "[mscdb]" でなく "mscdb" ならば dbname=mscdb と書きますが、そこは大丈夫でしょうか。ユーザ名とパスワードも同様です。

hahihuke
質問者

補足

[mscdb]をmscdbに修正したら正常に動きました。 お恥ずかしい限りです(--)ありがとうございます!!

関連するQ&A

  • DBIモジュールと Perl5.8

    Perl5.8のエンコードが理解できずに困っております。 MySQLでは、utf8の文字コードのデータがあります。 以下のスクリプトを実行させると、 Wide character in print at C:/usr/local/site/lib/DBI.pm line 1008. となります。 対処方法はあるのでしょうか? use utf8; use strict; use DBI; my $dbh = DBI->connect("dbi:mysql:dbname=test", "root", "", { AutoCommit=>1, PrintError=>1, RaiseError=>1} ); my $fname = "test.txt"; my $sth = $dbh->prepare("select id, namae from test order by id asc;"); $sth->execute(); # 出力ファイルを開く。 open FILE, ">" , $fname or die "Can't open $fname: $!"; # 整形された結果をファイルにダンプする。 my $rows = $sth->dump_results(80, "\n", ",", \*FILE); # 出力ファイルを閉じる。 close FILE or die "Error closing result file: $!\n"; $dbh->disconnect();

    • ベストアンサー
    • Perl
  • perlからMySQL5に接続できません

    WindowsでperlからMySQLに接続できません。 perlは以下のようなものです。 結果は「1」と表示されるので、MySQLへの接続ができていないのだと思います。 考えられる原因がわかる方、アドバイスをお願いします。 #!/Perl/bin/perl use DBI; print "Content-type: text/html\; charset=shift_jis\n\n"; print "1"; my($dbh, $sth); $dbh = DBI->connect("DBI:mysql:database=データベース名;host=127.0.0.1", "root", "rootのパスワード",{ RaiseError => 1, AutoCommit => 0 }); print "2"; $sth = $dbh->prepare("select * from テーブル名;"); 以下略 WindowsXP SP2 Apache2.2.4 ActivePerl5.8.8 MySQL5.0

    • ベストアンサー
    • MySQL
  • perlでpostgresを使えるようにしたい

    今までwindows2000でperl5.6とpostgresでDBIの構築をしていました。 昨今のセキュリティ事情を鑑みて、windowsXPにOSを入れなおし、Perlも5.10.0.1005にし、posgresも8.4.0にしようと思い立ちました。 perlはActivePerlです。 ActivePerlもpostgresもインストールしました。 ネットで検索したところ両者をつなぐにはDBIのモジュールが必要だとありました。 (2000の時は会社の人からファイルをもらってコピーしたので何も考えなくてもできました。その人とも疎遠になってしまって質問もできない状態です) モジュールを入れようと、binフォルダにあるppmをコマンドプロンプトから叩くと、エラーが出ます。 ppm gui failed: DBI connect('dbname=C:\DOCUME~1\ランカ~1\LOCALS~1\APPLIC~1/ActiveState/ActivePerl//ppm-MSWin32-x86-multi-thread-5_8.db','',...) failed: unable to open database file というエラーです。 すでにどこから手をつけていいのか、何をまずすべきかがわからなくなってしまいました。 ご教授いただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perl+DBI+Apacheの動作

    #!C:\\Perl\\bin\\MSWin32-x86-object\\jperl use DBI; print \"Content-type:text/html\\n\\n\"; print \"<html><body>test script</body></html>\\n\"; という内容のスクリプトを指定したフォルダの中に入れても、「test script]とブラウザ上に表示されません。そのまま「#!C:\\Perl\\bin\\MSWin32-x86-object\\jperl use DBI; print \"Content-type:text/html\\n\\n\"; print \"test script\\n\";」と 表示されます。 Apache、ActivePerl、Mysql、DBI、DBDはインストールし、Apacheも動作しているのは確認できます。 どうしてなのでしょうか。解決方法を教えていただけると助かります。どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • DBIを使用して物理的に分かれているPostgresに接続するには

    こんにちは。 WebサーバーとDBサーバー(postgres)があって、 WebのPerlプログラムからDBIを使用してのDB接続方法がわからなくて困ってます。 Webサーバーと同じPCにpostgreも入っている環境で動作してましたが、 DBサーバーを独立させることになったのですが connectの記述方法がわからないのです。 $dbh = DBI->connect("dbi:Pg:dbname=test", $user_name, $pass); 今まではこのような記述でOKでした。 しかし、今度は物理的に別れているので、 DBサーバーを指定するIPアドレスを記述する必要があるのかな、と思い (WebとDBサーバーはLANで直につながっています) $dbh = DBI->connect("dbi:Pg:dbname=test:host=XXX.XXX.XXX.XXX", $user_name, $pass); 等を試してみたのですがダメでした。 Webサーバー側のDBI・ドライバ設定は正しく動作しています。 (DBI->available_drivers;でドライバの列挙は正しく取得できているので) もちろんDBは正しく作成されています。 (DBサーバーで作ったユーザーは、DBログイン時にPassがいらない設定になってますが) 色々調べてみたのですが、IPアドレスを指定してのDB接続等の情報が どうしてもみつかりませんでした。 どなたかご存知の方、ぜひともご教授ください。

  • activeperlでDBD-Pgを扱うと、perlが強制終了する

    まず環境です。 -----[os環境]---------------- windows xp sp2 -----[active perlバージョン]- This is perl, v5.8.7 built for MSWin32-x86-multi-thread -----[cpan環境]-------------- ppm> properties DBI ppm> properties DBD-Pg で結果表示あり(インストール済みと判断) -----[PostgreSQLの環境]------ psql -U postgres -h localhost bookmark ユーザ postgres のパスワード:postgres ログイン可能でDB環境正常と判断。 の環境で、以下のスクリプトを実行すると、perlが強制終了します。 ------[test.pl]-------- #! /usr/bin/perl use DBI; $dbname = "worple"; $user = "postgres"; $passwd = "postgres"; $host = "localhost"; #DBオープン $db = DBI->connect("DBI:Pg:host=$host;dbname=$dbname", $user, $passwd) || die "DBI connect failed : $DBI::errstr"; #DBクローズ $db->disconnect; 1; ---------------- エラーメッセージがでることもなく、googleでも似た症状を探せないでいます。 何かヒントや、参考のURLでもいいのでお教え下さい。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • perlのdbi-connect処理のエラー

    active perlでdbi-connect処理から戻ってきません。教えてください。 以下のテスト的なプログラムで試しました。 Xには、数字が入ります。(会社のファイルサーバーになります) DBI->connectから戻ってきていないようです。(hhhhhhhhが表示されません) ちなみにDBI->connectをコメントにすれば表示されます。 申し訳ありませんが、どなたかご存知の方いらっしゃらないでしょうか? エラーがかえってこないと、何が悪いかわかりません。 困っています、宜しくお願いします。 ちなみにPerlは、Ver. 5.8.7.813でdbi,dbd-oracleは、昨日ppmでダウンロードしました。 # DBへコネクトする my $datasource = 'dbi:oracle:usrDB:xxx.xxx.x.xx:8080' ; my $usr = 'usrname' ; my $pass = 'usepass' ; my $dbh = DBI->connect($datasource,$usr,$pass) ; print "hhhhhhhhhhhh\n" ; if( ! $dbh ){ print "gggggggggggg\n" ; } $dbh->disconnect();

    • ベストアンサー
    • Perl
  • PerlからのCSV出力

    Perl初心者です。 PerlでOracleに接続し、結果をCSVを出力したいのですが 下記プログラムだとなにも出力されません。 Oracle10g OS:Linux *** #!/user/bin/perl # # # DBI モジュールの読み込み use DBI; #接続 my $hDb = DBI->connect("dbi:Oracle:dbname", "user/pass") or die "CONNECT ERROR $DBI::errstr"; #SELECT # $hSt = $hDb->prepare("SELECT ID,NAME FROM MASTER"); open(OUT, ">data.dat"); #実行 $nRes = $hSt->execute; #データの取得 while($raRes = $hSt->fetchrow_arrayref) { print OUT join(",", @$raRes), "\n"; } # ファイルクローズ close(OUT); $hSt->finish; $hDb->disconnect;

  • DBIがうんともすんとも言いません だれか助けてください

    症状: perlのプログラム内でDBIを使うと、その後の行がすべてスキップされてしまいます。エラーをだしてくれることもなく、何が原因なのかさっぱりわかりません。 「 #!/usr/bin/perl use DBI; print "Content-type: text/html", "\n\n"; print "this is test"; $d = 'DBI:mysql:test:Localhost';# データソース $u = 'root';# ユーザ名 $p = 'mypass';# パスワード # データベースへ接続 $dbh = DBI->connect($d, $u, $p) or print "Can't connect to MySQL"; print "<br />success!"; 」 「this is test」は表示されるのですが、「success!」が表示されないのです。もちろん「Can't connect to MySQL」も、その他のエラー表示も表示されません。 「 $dbh = DBI->connect($d, $u, $p) or print "Can't connect to MySQL"; 」 の行を消すと、「success!」も表示されます。 DBIを再インストールしたほうがよいのでしょうか? もともと、DBIをインストールするとき、いろいろてこずっていて、その時に何かおかしなことになってしまったのかもしれません。 それとも別の場所に問題があるのでしょうか。 ________________________________ 環境: Ubuntu8 Xampp ちなみにcpanで i DBIとやると、 「 CPAN: Storable loaded ok (v2.18) Going to read /root/.cpan/Metadata Database was generated on Fri, 20 Jun 2008 07:02:51 GMT Strange distribution name [DBI] Bundle Bundle::DBI (TIMB/DBI-1.605.tar.gz) Module = DBI (TIMB/DBI-1.605.tar.gz) 2 items found 」 とでます。 この問題のおかげでもう2日間作業がすすまないでいます。どなたか力をかしてください。おねがいします。

    • ベストアンサー
    • Perl