• ベストアンサー

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.?? です。

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

  • ベストアンサー
  • myosuke
  • ベストアンサー率100% (1/1)
回答No.2

> バックアップ用に、OIDごとコピーしようと思っていたのですが、oidもコピーできるのでしょうか? 可能かと思います。 COPY tabename TO '/foo/foo.csv' WITH OIDS DELIMITERS ',' とかでいけるのではないでしょうか。 ※度々ですが6.*系でできるのかどうかは判りかねます。 > テーブルに対してユーザapacheの権限を与えるには どうしたらよいでしょうか? 具体的な命令文についてはURLなどのマニュアルをご覧下さい。 場合によってはテーブルに対する云々より、pg_hba.confなどをいじる必要があるかもしれません。

参考URL:
http://www.postgresql.jp/document/pg653doc/j/user/sql-grant.htm
dv_vb
質問者

補足

『COPY tabename WITH OIDS TO '/foo/foo.csv'』で telnetで実行したpsqlの\copyと同じ出力結果が得られました。 ありがとうございました。 ちなみに、インストールされているposqgresのバージョンを 確認する方法があったら教えてください。 あと、出力されたファイルがSJIS形式になるのですが、 EUC形式にすることは可能でしょうか?

その他の回答 (1)

  • myosuke
  • ベストアンサー率100% (1/1)
回答No.1

\copyなど、\~の命令文はpsql上でのみ発行できる命令文だったと思います。 PostgreSQLでは通常のSQL文として、 COPY tabename TO '/foo/foo.csv' DELIMITERS ',' と言ったものがありますので、そちらで行われたらいかがでしょうか? 但し、PostgreSQL6系で利用できたかは、わかりません。(^^;

dv_vb
質問者

補足

バックアップ用に、OIDごとコピーしようと思っていたのですが、 oidもコピーできるのでしょうか? バックアップについては、pg_dumpが使えそうですが、 htmlから実行しようとすると、ユーザがapacheで、 テーブルに対して権限がありません。 テーブルに対してユーザapacheの権限を与えるには どうしたらよいでしょうか?

関連するQ&A

専門家に質問してみよう