これ何て呼びますか

OSはRedhat7.2、webサーバとしてはapache1.3.26を使用しています。
現在PHP4とPostgreSQLを使用してのwebアプリを構築中ですが、データベースへのレコード追加のことで質問があります。
テキストファイルをアップロードしデータベースに流し込むという処理をPHPから行いたいのです。

PostgreSQLに用意されているCOPYコマンドを使おうと思っていたのですがどうやらこれはPHPからは使えないらしいのです。このコマンドはPostgreSQLのスーパーユーザのみ実効可能とのことですが、DB接続時のユーザをスーパーユーザにしてもだめでした。
現在は、
echo \\\copy テーブル名 from '/tmp/$uploadfile_name' | /usr/local/pgsql/bin/psql データベース名
という文をシステム関数を使用して流すことにより処理していますが、これだとwebサーバとデータベースサーバが同じマシンじゃないとだめです。
データベースサーバとwebサーバを別のマシンにして同じような処理をするには、テキストファイルの中身を1行ずつ変数に格納して、1行ずつinsert文を発行していくしかないのでしょうか?また、この方法だと処理時間はかなりかかるのでしょうか?ちなみにテキストデータの中身は大体200行前後で一番多いときで1000行ほどです。フィールド数は70ほどです。どなたかよい方法があれば教えてください。
よろしくお願いします。

A 回答 (2件)

済みません、なんか書き方おかしいですね。



psql -h データベースサーバー名 -c "copy テーブル名 from ファイル名; " データベース名

ですかね?
    • good
    • 0

私もそういうので悩んだことがあります。


で、結局やっているのは、データベースのサーバーでftpdを動かして、Webサーバーからftpでファイルを転送して、そのファイルをcopyコマンドでテーブルにインポートするというもの。
PHPは"--enable-ftp"でconfigureするとftp関数が使えます。また、

psql -h データベースサーバー名 -c \"\
copy テーブル名 from ファイル名;
\" データベース名

ってしてやると、リモートホストから、データベースサーバー上のファイルからレコードを追加することができます。
参考になりますでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!