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

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

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

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

PHP

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

Q&A

解決済

2回答

2428閲覧

pg_queryで連続してCOPYを行いたい

nobodytolove123

総合スコア61

PostgreSQL

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

PHP

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

0グッド

0クリップ

投稿2018/02/15 04:24

編集2018/02/15 04:40

お世話になります。

前提としてROLEが持つ全テーブルの全レコードをファイルに出力することを実現したいです。

全テーブルの取得は以下のSQLで実現できました。
SELECT relnam AS TABLE_NANE FROM pg_stat_user_tables

SQLをpg_queryで実行して返り値の配列を元にレコードのデータの一部を取得するところまで出来ました。

php

1 2// テーブル名を取得 3$result = pg_query($connect, "SELECT relnam AS TABLE_NANE FROM pg_stat_user_tables"); 4 5// レコード取得処理 6foreach(pg_fatch_all($result) as $result){ 7 // valueを取得 8 $table = $result['table_name']; 9 // レコードを取得 10 pg_query($connect, "COPY $table TO 'var/logs/hoge' WITH CSV"); 11} 12

しかし実行するとforeach文で実行される最後のテーブルの情報しか取得できません。

検索をかけて行くとPostgresとのバックエンド同期が必要との情報もありましたが
現状飲み込めないと言った状況です。

ご回答よろしくお願いします。

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

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

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

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

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

m.ts10806

2018/02/15 04:29

$pg_queryはどこに定義されている変数でしょうか。pg_fatch_all($result)の中身は確認されましたか? 同じ出力先にしてる、、、とかいう可能性もありそうです。
nobodytolove123

2018/02/15 04:32

ご回答ありがとうございます!普通にタイポです、すみません
nobodytolove123

2018/02/15 04:33

pg_fatch_all($result)の出力は配列です、既に確認は行っています
m.ts10806

2018/02/15 04:35

$ table これもtypoですかね?クエリなのでそのあたりきちんと書かないと動かないのではと。(コピペミスであれば回答者側も不要な詮索を強いられることになるのでご注意を・・・)
nobodytolove123

2018/02/15 04:39

失礼しました、諸事情で携帯直打ちなのでご容赦下さい、すでに$tableとCOPY文の動作は確認済みです。しかし全件実行されないという状況です。
m.ts10806

2018/02/15 04:40

それは不便ですね。了解です。
guest

回答2

0

ベストアンサー

自前にPostgreSQL環境がないので試せないのですが、

To {filename}

出力先ファイル名を同じにしているからではないかと推察します。
同じファイル名にしているから常に上書きされていき、最後のものしか残らない。

テーブル内容をそれぞれ出力したいのであればテーブル名をファイル名にするなど工夫が必要ではと思います。
(file_put_contents()のFILE_APPENDみたいに同じファイルであれば追記とかオプションがあった気がしないでもないですが見つけられず・・・)

投稿2018/02/15 04:39

編集2018/02/15 04:42
m.ts10806

総合スコア80850

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

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

nobodytolove123

2018/02/15 06:18

日付/テーブル名で動的に出力し無事動作確認出来ました、ありがとうございます!
m.ts10806

2018/02/15 06:20

解決できたようで何よりです(昔、同じようなことでハマッたので経験が役に立って良かったです)
guest

0

ご回答ありがとうございます!早速実行してみます!

投稿2018/02/15 04:42

nobodytolove123

総合スコア61

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問