質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1342閲覧

【postgreSQL】PHPでDBのデータをCSVに出力したい

jam912sh

総合スコア25

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/08/24 02:42

編集2018/08/24 04:31

【postgreSQL】PHPでDBのデータをCSVに出力したい

PHPファイル内で、postgreSQLを使いデータベース上のテーブルデータ全てをCSVファイルにしたいのですが、色々調べてはみたものの、解決できませんでした。
postgreSQLにお詳しい方、ご教示頂ければ幸いで御座います。

該当のソースコード

<?php // PostgreSQLに接続 $conn = pg_connect('host=localhost dbname=test user=XXXXX password=XXXXX'); // SQL文を実行 $query = "COPY test_json TO '/tmp/sampletbl1.csv' CSV"; pg_query($conn, $query); // PostgreSQLを切断 $close = pg_close($conn); ?>

補足情報

・/tmp/sampletbl1.csv が作成されない状態です。
・MAMPを使用しております。
・DB接続は成功しております。
・PHPのエラーは発生致しておりません。
・PHPのバージョン:5.6.30
・PostgreSQLのバージョン:10.5
・MAMPのバージョン:5.0.1

 ・データベースにつきまして
ホスト名:localhost
DB名:test
取得したいテーブル名:test_json
取得後のCSVファイル名:sampletbl1.csv

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

直接回答に繋がらないかもしれませんが、if文でpg_queryの戻り値ではなく、$queryを判定してますよ。
クエリー結果が正しいかそれでは判定できてません。

投稿2018/08/24 02:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jam912sh

2018/08/24 03:22

ご回答頂き有難うございます。$query周りを今一度調査致します。ご指摘頂き有難うございます。
jam912sh

2018/08/24 06:03

こちらの件、無事に問題解決致しました。 お忙しい中、ご教示頂き有りとうございました!
guest

0

'/tmp/sampletbl1.csv'なるファイルへのアクセス権が
webサーバープログラム自身にあるかどうか
確認をお願いします。

それと、
db接続ユーザーの権限でCOPY文が実行される上で、
db接続ユーザーとOS上ユーザーの紐づけがされるクライアント認証を採用していれば、
OSユーザーが誰になっているかの権限も確認したほうが良いです。

MAMPだとApache httpdでしょうか。

コードについて。

php

1 // SQL文を実行 2 $query = "COPY test_json TO '/tmp/sampletbl1.csv' CSV"; 3 $result = pg_query($conn, $query); 4 5 if ($result === FALSE) { 6 echo "An error occurred.\n"; 7 echo pg_last_error($conn) . "\n"; 8 exit; 9 }

とかすればphp上ではなくPostgreSQLアクセスでのエラーなら表示されるかも。

投稿2018/08/24 02:52

編集2018/08/24 03:07
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jam912sh

2018/08/24 03:26

ご確認頂き有難うございます。 ファイルへのアクセス権のアクセス権は、ソースコード上のuser=XXXXX password=XXXXXは設定されております。OSユーザーの権限も、ソースコード上のuser=XXXXX password=XXXXXになっております。こちらでご回答になっておりますでしょうか。
jam912sh

2018/08/24 04:24

PostgreSQLアクセスでのエラーのコード有難うございます。 実行致しましたところ、エラー等は何も表示されませんでした。 ご指摘頂きました、アクセス権周り、今一度調査致します。 貴重な情報頂き有難うございます!
退会済みユーザー

退会済みユーザー

2018/08/24 04:45

/usr/local/var/postgres/pg_log/ の下に人間が読める形でログが記録されているはずです。 そこにエラーメッセージなど残っていないでしょうか。
jam912sh

2018/08/24 04:55 編集

失礼致しました。 phpエラーとwebに表示されるエラーのみ確認をおこなっておりました。 ログの内容は以下で御座います。 LOG: connection received: host=::1 port=54870 LOG: connection authorized: user=XXXXXXXX database=test LOG: statement: COPY test_json TO '/tmp/sampletbl1.csv' CSV LOG: disconnection: session time: 0:00:00.009 user=XXXXXXXX database=test host=::1 port=54870
jam912sh

2018/08/24 05:16

ファイルへのアクセス権につきまして、「tem」フォルダ「sampletbl1.csv」ともに、すべてのユーザーに読み書き権限を付与し、今一度動作確認致しましたが、CSVファイルの中身は更新されない状態は続いております。 アクセス権の設定が必要で有る事、大変勉強になりました。有難うございます。
jam912sh

2018/08/24 05:58

m6u様、この度はご教授頂き大変有難うございました。 こちらの件、無事に問題解決致しました。 原因は私のボンミスで御座いまして、パスに問題が御座いました。 '/tmp/sampletbl1.csv' CSV"; ↓ '/Applications/MAMP/htdocs/tmp/sampletbl1.csv’; m6u様から頂きました情報も大変参考になりました。 お忙しい中、お力をお貸し頂き有難うございました!
guest

0

ベストアンサー

sql を psql で実行できますか?
当方、

sql

1copy テーブル名 to '/パス/ファイル名.csv' with csv;

でないと実行できませんでしたが・・・
パスは postgres ユーザの書き込み権限が必要です。

投稿2018/08/24 02:52

showkit

総合スコア1638

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jam912sh

2018/08/24 03:29

ご回答頂き有難うございます。パスは、ソースコード上のuser=XXXXX password=XXXXXが読み出し、書き込みが可能な状態で御座います。 psqlを実行できるようにするにはどうしたら良いものでしょうか?
showkit

2018/08/24 03:45

データベースのホスト名が localhost とのことですので、データベースはそのマシンで起動していますね? であれば、起動しているプログラムは pg_ctl のはず。 psql は pg_ctl と同じディレクトリに存在しているはずですが・・・ありませんか?
jam912sh

2018/08/24 04:28 編集

pcはmac環境で御座いますが、/usr/local/var/postgres/の中を確認致しましたが「psql 」も「pg_ctl 」も見当たらないようで御座います。 「postgres」には格納されているようで御座います。 PG_VERSION pg_logical pg_tblspc pg_multixact pg_twophase pg_wal global pg_replslot pg_xact pg_serial postgresql.auto.conf pg_commit_ts pg_snapshots postgresql.conf pg_dynshmem pg_stat postmaster.opts pg_hba.conf pg_stat_tmp postmaster.pid pg_ident.conf pg_subtrans
退会済みユーザー

退会済みユーザー

2018/08/24 04:36

コンソール上でpsqlコマンドを叩きます。
退会済みユーザー

退会済みユーザー

2018/08/24 04:41

Macユーザーじゃないので外すかもしれないけど、/usr/local/bin の下とか、 postgresql実行物がごっそり置かれる場所が絶対あるはずです。 https://qiita.com/_daisuke/items/13996621cf51f835494b を参照するに、 /usr/local/Cellar/postgresql/9.3.4/bin/ にpsqlコマンドがありそう。
jam912sh

2018/08/24 04:47

ご教示頂き有難うございます。 /usr/local/binの中に、「psql」 と 「pg_ctl 」御座いました! 失礼致しました。 また、データベースはmacのMAMPにて起動致しております。
showkit

2018/08/24 04:56

/usr/local/bin/psql で起動できそうですね。
jam912sh

2018/08/24 05:01

はい、以下のコマンドにて、postgresqlが起動できる事を確認致しました。 brew services start postgresql 有難うございます。
jam912sh

2018/08/24 05:21

パスのご指摘の件で御座いますが、 ファイルへのアクセス権につきまして、「tem」フォルダ「sampletbl1.csv」ともに、すべてのユーザーに読み書き権限を付与し、再起動をして、今一度動作確認致しましたが、CSVファイルの中身は更新されない状態は続いております。 アクセス権の設定が必要で有る事、大変勉強になりました。有難うございます。
showkit

2018/08/24 05:35

psql でその sql を実行したら どうなりますか?
jam912sh

2018/08/24 05:53

なるほどで御座います! ターミナルよりsql を実行致しましたら、以下のエラー表示されました。 ERROR: syntax error at or near "psql" LINE 1: psql "COPY test_json TO '/tmp/sampletbl1.csv' CSV";
jam912sh

2018/08/24 05:54

先程のご指摘にて、エラーがわかり、 パスに不備がある事が分かりました! 以下のパスの修正を行い、無事にデータベースの情報がCSVファイルへ反映される事を確認致しました。 showkit 様のご指摘にて、無事に問題解決致しました。 お忙しい中、ご教示頂き有りとうございました! また大変勉強になりました。 '/tmp/sampletbl1.csv' CSV"; ↓ '/Applications/MAMP/htdocs/tmp/sampletbl1.csv’;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問