PostgreSQLに大量のデータを登録する際はINSERTを使って一件づつ処理するより、COPYを使って一気に登録した方が実行速度が(かなり)速いです。 そこでPHPでもCOPY文を使ってみましょう。 pg_copy_fromを使う 登録するデータが配列に入っているならpg_copy_fromだけで一気に処理できます。 配列の1要素が1レコードに対応しています。1要素内では各カラムをデリミタ(デフォルトは”\t”)で連結します。 <?php $values = array(); $values[] = "1\tname1"; $values[] = "2\tname2"; $values[] = "3\tname3"; $db = pg_connect("dbname=hogedb"); pg_copy_from($db, 'table',
Webサーバが一台の場合はPHPが処理するよりもデータベースで処理した方が早い。 あと絶対的な時間。例えばPHPで計算して一ページ表示するのに1秒かかりDBで計算して0.1秒かかる場合は、Webサーバが複数あってもどっちにロジックを持って行くかは考えもの。PHPで集計処理を行うとしても、結局DBにselect文を発行する回数は増えるわけだし。 まぁ同時アクセスの数だなぁ。新規のネットショップ程度なら一秒間に何十人もアクセスしてくることは無いと思うのでDB側で処理するのがいいかと。 ただAjaxを使ってる場合は、一人が一ページ表示中に何度もリクエストを送ることになるのでそれも考慮しないといけない。 というわけで、うちの場合は同時アクセスが少ないかつ重い処理を行うのでDB側で計算するように修正。 主な変更項目。 アクセラレータを利用する foreach を減らす 圧縮転送を行う 文字コードにE
MDB2_Result_Common オブジェクトには、結果セットの行からデータを取得するための 4 つのメソッドがあります。 fetchOne()、 fetchRow()、 fetchCol() そして fetchAll() です。 fetchRow() および fetchOne() は、それぞれ行全体あるいは特定のカラムのフィールドを取得します。 結果ポインタは、これらのメソッドがコールされるたびに次の行に移動します。 結果セットの最後に達した場合は NULL が返されます。 fetchAll() および fetchCol() は、結果セットのすべての行を読み込んで結果ポインタを最後まで移動します。 fetchAll() は行全体のデータを読み込みますが、 fetchCol() は特定のカラムのみを読み込みます。 エラーが発生した場合は MDB2_Error が返されます。 <?php
さて、今日はXAMPPのMySQLに続いて、先週リリースされたばかりのもうひとつのオープンソースDBMS、PostgreSQL8.3 for Windowsをインストールしてみた。 PostgreSQL for WindowsのインストーラはFATを嫌う。FATはファイルシステムとして信頼性が低いこともあるが、PostgreSQLの持つテーブルスペース機能がNTFS5以降を必要とするからだ。インストールをするためには、データベースクラスタの初期化をせず、あとで手作業で行うようにする。 DBクラスタの初期化はインストールウィザードの途中のダイアログに出てくる、オプションのチェックをはずす。 インストール先をDドライブにしてインストールした。 次に、DBクラスタの初期化をコマンドプロンプトから行う。 set PGROOT=d:\PostgreSQL\8.3 %PGROOT%\bin\initd
Description PEAR MDB2 では、データベースに対するクエリを実行するために いくつかのメソッドを用意しています。いちばん直接的なメソッドは query() です。これは、SQL クエリ文字列を引数として受け取ります。返り値には二通りの可能性があります。 結果を返すクエリ (SELECT など) が成功した場合には新しい MDB2_Result オブジェクト、失敗した場合には MDB2_Error オブジェクトを返します。 このメソッドは、データを操作するような文 (INSERT など) に対して使用してはいけません。 <?php // まずプログラムの最初に、$mdb2 という名前の // MDB2 オブジェクトを作成します require_once 'MDB2.php'; $mdb2 =& MDB2::connect('pgsql://usr:pw@localhost/
HOMMEZ(オムズ)は男性の心と身体の健康を支援し、一人でも多くの人が子供を得る幸せや男性としての喜びを享受できる社会の実現を目指しています。男性の妊活、活力にまつわる情報や商品の力で性や妊活に悩む男性が効率的に納得感を持って活動できる機会を創出します。
autoPrepare() および autoExecute() を使用することで、あのうんざりするような INSERT 文や UPDATE 文を書く必要がなくなります。例えばテーブルにフィールドを 追加したような場合に、いちいち書き直す必要もなくなります。 3 つのフィールド (id、name そして country) を持つ 'user' というテーブルがあるとしましょう。 この場合、以下のような SQL クエリを書くことになるでしょう。 INSERT INTO table (id, name, country) VALUES (?, ?, ?) UPDATE table SET id=?, name=?, country=? WHERE ...
まずデータベースへの接続方法です。DBクラスで用意されているconnectメソッドを使います。 connect object connect (mixed $dsn [, array $options = array()]) 新しい DB 接続オブジェクトを作成し、指定したデータベースに接続します。 パラメータ string あるいは array $dsn データソース名。 array $options オプションの引数に、このパッケージのための実行時設 定項目を 含めることができます。 返り値 object - 新しい DB オブジェクト、 あるいは失敗時には DB_Error オブ ジェクトを返します。 データベースへ接続するための情報をDSN(データソース名)の形で指定します。指定は文字列でまとめて指定するか、配列の形で指定します。 DSNの形式 DSNのフォーマットは下記の通りです
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く