問題タブ [postgresql-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PostgreSQL COPY コマンドの問題
私の Postgresql データベースではNAV_DATA
、5 つの列を持つテーブルを作成しました。
これらの列には、区切り文字 TAB\t
と Quotecharの csv ファイルがあります"
。
また、中央の列に空のフィールドがいくつかあります。
copy コマンドで null 値を受け入れるにはどうすればよいですか?
列を挿入したい(name, call_type, date_created)
。id
私のcsvにフィールドがありません。
特定の列をDBにコピーする方法は?
問題は区切り文字 TAB にもあり\t
ますか?
postgresql - 日付形式を知らずに日付文字列をタイムスタンプに変換する方法
timestamp with no timezone data
タイプフィールドに値を挿入するクエリを作成しようとしています。値はCSVファイルから取得されます。
私が使用しているバージョンはPostgreSQL8.1.21です。
CSVファイルのアップロードはクライアントによって行われ、日付列があります。日付は、フォーマットとして'28-Sep-13'
、場合によっては来ることがあり'28/09/2013'
ます。
次を使用して、文字列をタイムスタンプにキャストしようとしました
str_date::timestamp
。
これは、のstr_date
ような場合は正常に機能しますが、次のエラーが発生したときに'28-Sep-13'
、受信日が次の形式の場合は機能しません。'28/09/2013'
基本的に、クライアントはアップロードされたCSVファイルの日付形式を変更し続けます。
実際の形式に応じて、日付文字列をタイムスタンプに変換する方法はありますか?
postgresql - PostgreSQLのCOPYステートメント
PostgreSQLのCOPYステートメントを使用すると、次のようにテキストファイルからデータベースのテーブルにデータをロードできます。
COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.txt' DELIMITER AS '~'
上記のステートメントは、サーバーが別のWindowsマシンにある場合に、postgresqlクライアントを備えたマシンから実行されます。上記のステートメントを実行すると、私は不平を言いますERROR: could not open file "C:\Program Files\ERROR_CODES\errcodes.txt" for reading: No such file or directory
。
調査の結果、COPY
ステートメントが同じパス(C:\ Program Files \ ERROR_CODES)にあるpostgresqlサーバーのマシンでローダーファイル(errcodes.txt)を探していることがわかりました。これをテストするために、postgresqlサーバーのマシンに同じフォルダー構造を作成し、そこにerrcodes.txtファイルを保持しました。その後、COPYステートメントはうまく機能しました。COPYステートメントでは非常に厳しい制約に見えます。これを回避するために必要な設定はありますか?それともCOPYステートメントの振る舞いですか?PostgreSQLドキュメントに関する情報は見つかりませんでした。
php - phpを使用してtxtファイルをpostgresにインポートする際の問題
「\copy」コマンドを使用して、phpからpostgresデータベースにtxt/csvファイルをインポートしようとしています。psqlクライアントとして実行する必要があるため、\copyの代わりにCOPYを使用できません。私のコードは次のとおりです。
このphpファイルを実行すると、次のエラーが発生します。
postgresql - 文字列値にコンマを含む CSV をインポートする
簡単な CSV を Postgres 8.4 データベースにインポートしようとしています。
ここに表があります:
CSV ファイルのサンプルは次のとおりです。
クエリ:
例外をスローします:
しかし、まあ、CSV の解析はロケット科学ではなく、ソースの CSV ファイルを再フォーマットしないと解決できないのではないかと思います。
入力はサードパーティからのもので、形式を変更できません。
(インポートする前に区切り文字を変更する前処理ができることを理解しています。)
最終的な解決策:
もともとhttps://stackoverflow.com/a/9682174/251311から取得したもので、ドキュメント ページはhttp://www.postgresql.org/docs/8.4/static/sql-copy.htmlです。
postgresql - PostgreSQL の COPY 関数
PostgreSQL の COPY 関数を使用して、CSV ファイルを PostgreSQL データベースにインポートしたいと考えています。
ドキュメントにファイル名が記載されている場合、CSV ファイルは特定の場所に保存する必要がありますか、それとも任意の場所に保存できますか。
たとえば、copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';
. それが言うところでtmp
、それは C: ドライブの tmp フォルダを意味しますか。別のフォルダ名に変更できますか?
sql - ファイルからPostgreSQLテーブルにマトリックスをロードします
次のようなファイルuniversities.txtがあります。
..など。この場合、アラバマ、アラスカ、アリゾナが場所であり、その他はすべて大学です。私がやりたいのは、場所をと呼ばれるテーブルにロードしLocation
、大学をと呼ばれるテーブルにロードすることですUniversity
。ここId
で、テーブルのは次のようにテーブルLocation
へのFKです。University
したがって、Postgresでやりたいことは次のようなものです。
誰もがこれを行う方法を知っていますか?
postgresql - Postgresでレコードが変更されたかどうかを確認する方法
少し「アップサート」タイプの質問があります...しかし、stackoverflowで読んだものとは少し異なるので、そこに投げたいと思います。
基本的な問題。
mysqlからPostgreSQL9.1.5(Herokuでホストされている)への移行に取り組んでいます。その一環として、毎日複数のCSVファイルをインポートする必要があります。一部のデータは販売情報であり、ほぼ確実に新しいものであり、挿入する必要があります。ただし、データの他の部分はほぼ同じであることが保証されています。たとえば、csvファイル(複数形に注意)には、POS(販売時点情報管理)情報が含まれます。これはめったに変更されません(そして、ほとんどの場合、追加によってのみ変更されます)。次に、製品情報があります。約10,000の製品があります(大部分は変更されませんが、追加と更新の両方を行うことができます)。
最後の項目(ただし重要です)は、特定の項目の監査証跡/情報を提供できるようにする必要があるということです。たとえば、新しいPOSレコードを追加する場合は、それが見つかったファイルまでさかのぼることができる必要があります。UPCコードまたは製品の説明を変更する場合は、それをさかのぼることができる必要があります。変更元のインポート(およびファイル)へ。
私が考えている解決策。
データはCSVで提供されるので、私はCOPYが最良/最速の方法であるという考えに取り組んでいます。ファイル内のデータの構造は、私がデータベースに持っているもの(つまり、最終的な宛先)とは正確には異なります。そのため、CSVに一致するステージングスキーマのテーブルにそれらをコピーしています(注:データソースごとに1つのスキーマ)。ステージングスキーマのテーブルには、挿入前の行トリガーがあります。これらのトリガーは、データの処理(挿入、更新、または無視)を決定できます。
新しいデータが含まれている可能性が最も高いテーブルの場合、最初に挿入を試みます。レコードがすでに存在する場合は、NULLを返します(ステージングテーブルへの挿入を停止します)。めったに変更されないテーブルの場合、テーブルにクエリを実行し、レコードが見つかったかどうかを確認します。もしそうなら、フィールドのいずれかが変更されているかどうかを確認する方法が必要です。(覚えておいてください、ファイルyからインポートxによってレコードが変更されたことを示す必要があります)明らかに、コードをボイラープレートして各列をテストすることができます。しかし、それよりももう少し「雄弁」で保守しやすいものを探していました。
ある意味、私がやっていることは、輸入システムと監査証跡システムを組み合わせることです。そこで、監査証跡を調査する際に、次のwiki.postgresql.orgの記事を確認しました。hstoreは変更を取得するための優れた方法のようです(そして、重要ではないテーブル内のいくつかの列を簡単に無視できるようになります-たとえば、 "last_modified")
私はそれがすべてうまくいくと約90%確信しています...私はいくつかのテストテーブルなどを作成し、それで遊んだことがあります。
私の質問?
データベースへの変更が必要な10Kからおそらく3つのレコードを見つけるというこのタスクを実行するための、より優れた、より保守しやすい方法です。私は確かにファイルを読み取り、各レコードをどう処理するかを理解しようとするPythonスクリプト(または他の何か)を書くことができましたが、それはひどく非効率的であり、多くのラウンドトリップにつながります。
最後にいくつか:
- 入力ファイルを制御できません。彼らが私にデルタを送ってくれればいいのですが、そうではなく、それは完全に私のコントロールや影響力の範囲外です。
- システムは成長しており、処理されるデータの量を大幅に増やす新しいデータソースが追加される可能性があります(したがって、私は物事を効率的に保つようにしています)
- これは素晴らしく単純なSOの質問(「Pythonでリストを並べ替える方法」など)ではないことは知っていますが、SOの優れた点の1つは、難しい質問をすることができ、人々が自分の考えを共有できることです。それを解決する最良の方法はです。
sql - Postgresテーブルにレコードが存在するかどうかを確認します
20秒ごとにCSVを読み取る必要があります。各CSVには最小値が含まれます。500から最大 60000行。Postgresテーブルにデータを挿入する必要がありますが、重複するアイテムを取得する可能性が高いため、その前にアイテムがすでに挿入されているかどうかを確認する必要があります。一意性をチェックするフィールドにもインデックスが付けられます。
そのため、ファイルをチャンクで読み取り、IN句を使用して、データベースに既に存在するアイテムを取得します。
それを行うためのより良い方法はありますか?
postgresql - PostgreSQL テーブルから特定の行を INSERT SQL スクリプトとしてエクスポートする
次の名前のデータベース スキーマnyummy
と、次の名前のテーブルがありますcimory
。
cimory
テーブルのデータを挿入 SQL スクリプト ファイルとしてエクスポートしたいと考えています。ただし、都市が「tokyo」と等しいレコード/データのみをエクスポートしたいと考えています (都市データはすべて小文字であると仮定します)。
どうやってするの?
ソリューションがフリーウェアの GUI ツールであるか、コマンド ラインであるかは問題ではありません (ただし、GUI ツール ソリューションの方が優れています)。pgAdmin III を試してみましたが、これを行うオプションが見つかりません。