• 締切済み

PEARでpg_copy_fromは使えませんか?

PHPで開発していて、 DB接続にPEARを使用しています。 現在、プログラム内にて、 テーブルにデータをinsertする際に、 1レコードずつinsert文を使用していますが、 レコード数が多いため、処理に時間がかかっています。 処理スピードを早くするために、 PHPのpg_copy_from関数を使ってデータを入れようと思ったのですが、 DB操作をPEARで行っていると、この関数は使えないのでしょうか。 (いろいろ調べたのですが、それらしい情報を見つけられませんでした。) PEARからpg_copy_from(またはそれに類似する方法)を使用する方法か、 テーブルに大量のデータをinsertする際に、高速化をコーディングで実現する方法、 いずれかご存知の方がいらっしゃったら、教えていただけないでしょうか。 (PHP経験が浅いため、質問自体がおかしかったらすみません。)

  • PHP
  • 回答数1
  • ありがとう数5

みんなの回答

回答No.1

DB.phpをあまり使ったことがないのですが、 COPY FROMのクエリを送るのはどうなんでしょうか。 恐らく動作的には同じ?だと思うのですが。

参考URL:
http://www.postgresql.jp/document/pg810doc/html/populate.html
cucsna
質問者

お礼

回答ありがとうございます。 私自信、あまり詳しくないのですが、COPYはテキストファイル(csv)ファイルのデータを取り込むという感じでしょうか。 できれば、ファイルを介したくないのですが・・・。 質問への記載漏れなのですが、テーブルのデータ全件ではなく、一定の条件で絞り込む予定なので難しいかもしれません。 接続そのものを、pearを使わない形にしないと駄目そうですかね・・・。 PHPの情報ばかり追っていましたが、postgreSQLのドキュメントも目を通すべきだと反省しました。 URLは参考になります。ありがとうございました。

関連するQ&A

  • pg_copy_fromの使い方について質問です。

    pg_copy_fromの使い方について質問です。 <?php $a = array(1,2); $con=pg_connect("host=localhost dbname=byoin port=5432 user=postgres"); if (!$con) { die("データベースが開けません。<br>\n"); } pg_copy_from($con,ccc,$a,","); pg_close($con); ?> のようにすると、 Warning: pg_copy_from() [function.pg-copy-from]: Copy command failed: ERROR: 列"eee"のデータがありません CONTEXT: cccのCOPY。行番号 1: "1" in C:\xampp\htdocs\c.php on line 7 のようにエラーが出ます。 ちなみにデータベースは、 cccというテーブルの中にddd(integer not null、主キー)とeee(integer)の2列が作ってあります。 どうすれば、コピーがうまく出来るのでしょうか? ご回答をお願い致します。

    • ベストアンサー
    • PHP
  • PEAR::DBでプロセスは取得できる?

    お世話になります。 PHP5でPEAR::DBを使ってpostgresに接続しています。 $conn = pg_connect(略); を使えば $pid = pg_get_pid($conn); でバックエンドのプロセスIDが取れます。 ですが、PEAR::DBにも同じ機能を持つメソッドなどがあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • pearがエラーになる

    xamppにpearをインストールし、テキストを見ながらプログラムを作成し、実行しましたが、とエラーになります。 エラーの画面は以下のとおりです。 接続に成功しました Fatal error: Call to a member function getOne() on a non-object in C:\Program Files\xampp\htdocs\pje_bulletin\bbs.php on line 15 これに対するプログラムは以下のようなものです。 【bbs.php】 <?php require_once("Init_class.php"); $init_obj = new Init_class(); $in_disp_from = $_GET["in_disp_from"]; if(!$in_disp_from = intval($in_disp_from)){ $in_disp_from = 0; } $in_disp_to = $in_disp_from + 10; $sql = "SELECT (*) FROM bbs_table"; $count_result = $init_obj->db_object->getOne($sql); ←ここがline 15 $sql="SELECT message_sequence,contributor,mai_address,home_page_uri,subject,message,pass,_word,write_date FROM bbs_table ORDER BY message_sequence DESC LIMIT ".$in_disp_from.", "."10"; $db_result = $init_obj->db_object->query($sql); disp_html_header($init_obj->bbs_name); ?> 以下続く 【Init_class.php】 <?php /* PEAR::DBを読み込む */ require_once("../../php/PEAR/DB.php"); require_once("html_disp.php"); /* メンバ変数 */ class Init_class{ var $db_object; var $decode_key = "abcdefg"; var $db_user = "root"; var $db_pass = ""; var $db_host ="localhost"; var $db_name ="keroro"; var $bbs_name = "まっちゃんの掲示板"; } /* コンストラクタ → DBへの接続 */ function Init_class(){ $db_string = "mysql://".$this->db_user.":".$this->db_pass."@".$this->db_host."/".$this->db_name; $this->db_object = DB::connect($db_string); } print("接続に成功しました"); 以下続く ●pearを使わないで、PHPから直接MySQLにつながります。 ●SQLも簡単なヤツですし、コマンドラインからも問題ありませんでした。 ●一旦は接続できているようなのですが、次のrowをカウントに行くところでつまづいています。 PEARがちゃんとインストールされていないのかと思いましたが、 コマンドで「pear list」とやると、 DB    1.7.13    stable なっており、このほかに70個ぐらいのモジュールというかパッケージがセットされているようです。 それと、php.iniのinclude pathもちゃんと設定されています。 どなたかご指導下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR DBでの行取得について

    PEAR::DBにてテーブルの内容は現在下記のようにしておりますが 明示的に例えば2行目のデータを取得したい場合はどのようにすれば良いでしょうか。 $res =& $db->query('select * from shouhin'); while ($row =& $res->fetchRow()) { }

    • ベストアンサー
    • PHP
  • pg_dumpの文字化け

    PostgreSQLのpg_dumpを用いたバックアップで困っています。 OSはVineLinux 2.2.17-0vl10です。 あるサーバ(PostgreSQL7.0.2)のデータベースtest_db(EUC_JP)に対して、 pg_dump -D -v -i -f test.dump test.db でダンプファイルを作成しました。 COPYでは不確実な場合があるということでINSERT文で出力しました。 (データの日本語の部分が数字に変換されています) それを別のサーバ(PostgreSQL8.2.5)のデータベースtest2_db(EUC_JP)にリストアしました。 psql test2_db < test.dump すると、"(株)"という文字を含む文字列が化けてしまっていました。 同じレコードの他のカラムは大丈夫です。 このような場合の対策がありましたら教えていただきたいと思います。 宜しくお願いします。

  • PEAR_DBをオフラインでインストールするには

    ネットに繋げないサーバにPEAR_DBをインストールする方法はありますか。 現在、PEARをインストール済みのサーバで「pear install DB」を打つと、 以下のメッセージが表示されます。 No releases available for package "pear.php.net/DB" Cannot initialize 'channel://pear.php.net/DB', invalid or missing package file Package "channel://pear.php.net/DB" is not valid install failed PHPは5.2.5です。

    • 締切済み
    • PHP
  • pearのdisconnect()が使えない。

    Pearを使用してデータベースのインターフェースを抽象化したいと考ています。そこで以下のようなクラスを作りました(エラー処理は略、DB.phpは読み込んでいます) class cls_db { var $con; function connectDB() { $this -> con = DB::connect(DBの場所,true ); } function closeDB() { $this -> con -> disconnect(); } } そして、別のPHPから、 require"cls_db.php"; $db = new cls_db(); $db->connectDB(); $db->closeDB(); closeDB()を呼び出すとdisconnectが見つからないと出ます。 こういう使い方はできないのでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • PEARのエラーを救ってください。

    こんにちは,よろしくお願いします。 6行目 $rs = $db->query("SELECT * FROM member ORDER BY id ASC"); PEAR::DBで,上のようなクエリーを実行しようとすると次のようなエラーが出ます。 Fatal error: Call to undefined method DB_Error::query() in /home・・・・・/aaaa.php on line 6 PEAR::MDB2でも同じエラーが出ます。 また,PEARを使わないデータベースとの接続は,問題なくできます。 接続はうまくいっているようなのですが,原因と対処法を教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR PAGERでの大量データ処理についての質問

    PEAR PAGERでの大量データ処理についての質問 お世話になっております。 <実行環境> PHP=Ver5.3.1 , db=db2 , smarty使用 例)50万レコードの名称データからある文字列のデータを抽出して画面表示させるPHPですが、   1画面に表示するデータ件数=20件とした場合、抽出されたデータが1万件あった場合、   ページ数=10000/20=500ページになります。 現在、上記例の場合はデータ抽出とページ作成に長時間掛かり、使用に耐えません。 そこで時短策についてご存知の方、よろしくお願いいたします。 <基本的な質問> PEAR PAGERは対象データとして抽出された結果データ(配列)に対してのページング機能と 理解してよろしいですか? <問題解決策の質問> 小生が解決策として考えたのは下記2点なのですが、 1)抽出データのSELECT時にFETCH FIRST 500 の様に、表示対象データ件数を固定してしまい、   それ以上は新たに検索キーワードを入力し直す方法・・・これだとページは25ページで終了。 2)抽出データのSELECT時にBETWEEN m AND n の様にm件目からn件分と定義して置き、   PHPで”次頁”、”前頁”を押した時にPEAR PAGERを抜出してSELECT文を設定し直して   PEAR PAGERを再実行させる方法・・・これだとPAGERはいらない? ---------------------------------- もっと簡単でスマートな方法ご存知ありませんか? PEAR PAGERの有効な使用方法をご教授頂けると幸いです。 *質問文が解り辛かったらお詫びいたします。

    • 締切済み
    • PHP