- ベストアンサー
PHPからのpostgresDBのテーブルに対し『\copy』の実行はできますか?
$conn = pg_connect("host=xxxxxx user=postgres port=5432 dbname=xxxx"); $result = pg_Exec ($conn, $SQLSTR) ; HTML上から上記のようにphpの関数 pg_Exec を使用して、 copy文を実行したいのですが、うまくできません。 phpからcopy文を実行することはできないのでしょうか? コピー文:"\copy tablename with oid to /tmp/output" ちなみに、$SQLSTRにselectやupdateなどのSQL文をいれると うまくいきます。 使用している環境は、OSがlinuxで、APACHE+php3+postgres6.?? です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> バックアップ用に、OIDごとコピーしようと思っていたのですが、oidもコピーできるのでしょうか? 可能かと思います。 COPY tabename TO '/foo/foo.csv' WITH OIDS DELIMITERS ',' とかでいけるのではないでしょうか。 ※度々ですが6.*系でできるのかどうかは判りかねます。 > テーブルに対してユーザapacheの権限を与えるには どうしたらよいでしょうか? 具体的な命令文についてはURLなどのマニュアルをご覧下さい。 場合によってはテーブルに対する云々より、pg_hba.confなどをいじる必要があるかもしれません。
その他の回答 (1)
- myosuke
- ベストアンサー率100% (1/1)
\copyなど、\~の命令文はpsql上でのみ発行できる命令文だったと思います。 PostgreSQLでは通常のSQL文として、 COPY tabename TO '/foo/foo.csv' DELIMITERS ',' と言ったものがありますので、そちらで行われたらいかがでしょうか? 但し、PostgreSQL6系で利用できたかは、わかりません。(^^;
補足
バックアップ用に、OIDごとコピーしようと思っていたのですが、 oidもコピーできるのでしょうか? バックアップについては、pg_dumpが使えそうですが、 htmlから実行しようとすると、ユーザがapacheで、 テーブルに対して権限がありません。 テーブルに対してユーザapacheの権限を与えるには どうしたらよいでしょうか?
補足
『COPY tabename WITH OIDS TO '/foo/foo.csv'』で telnetで実行したpsqlの\copyと同じ出力結果が得られました。 ありがとうございました。 ちなみに、インストールされているposqgresのバージョンを 確認する方法があったら教えてください。 あと、出力されたファイルがSJIS形式になるのですが、 EUC形式にすることは可能でしょうか?