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

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

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

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

Q&A

解決済

1回答

215閲覧

postgresQLでインポートしたデータに追加は出来ますか?

hana15

総合スコア6

PostgreSQL

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

0グッド

0クリップ

投稿2024/12/04 04:45

postgresQLでCOPYを使ってデータをインポートするところまでは出来たのですが、データに追加があった場合、追加分だけをインポートする方法はありませんでしょうか?

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

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

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

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

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

poto568

2024/12/04 05:02

試してませんが、やりたいのは以下のようなことでしょうか。 https://www.postgresql.jp/document/16/html/sql-copy.html COPY FROMコマンドは、ファイルからテーブルへとデータをコピーします (この時、既にテーブルにあるデータにコピーした内容を追加します)。
hana15

2024/12/04 05:13

既にデータがある場合は追加分だけ読み込まれるということでしょうか? 追加して同じようにCOPYのコードを入れたら下記のエラーが表記され出来ませんでした。 ERROR: duplicate key value violates unique constraint "id_code_pkey" DETAIL: Key (id)=(A123456789) already exists.
kikukiku

2024/12/04 05:18 編集

追加データに関して、新たにファイルを作成し、 COPYコマンドでインポートすれば良いと思いますが、 何か問題があるということですか? 上記コメントは撤回します。
kikukiku

2024/12/04 05:55 編集

COPYコマンドは、インサートしかしないため、 すでにテーブル上に、同じ主キーのデータが存在する場合 インサートできずにエラーになります。 なので、ファイル内は、テーブル上に存在しないデータのみにしてください。
kikukiku

2024/12/04 06:09 編集

もし上記のようにできない場合には、 下記のステップで実施することができると思います。 1.1次テーブルの作成 2.1次テーブル内の全レコード削除 3.COPYコマンドで1次テーブルにインサート 4.主キーが存在する場合には、1次テーブルから既存テーブルにアップデート 5.主キーが存在しない場合には、1次テーブルから既存テーブルにインサート 上記4と5が下記記事にように同時に実行できます。 https://qiita.com/suin/items/171e5b2c9ef88225861b
hana15

2024/12/04 06:02

追加する分だけインポートしたら出来ました。 重複するデータは無視出来たら良かったのですが、COPYコマンドでは無理なのですね。 ありがとうございました。
guest

回答1

0

ベストアンサー

インポート元のファイルに追加が生じたという事ですね。
幾つか方法が考えられます。
①インポート先のデータを全件削除して、インポートする。
②copyコマンドでのインポート先を一時テーブルにして、そのテーブルからのupsertにする。

②については以下参考
【PostgreSQL】psqlのCOPYコマンドによるCSVインポートで重複エラーを回避する
CSVファイルをPostgreSQLに取り込みたい

投稿2024/12/04 05:35

編集2024/12/04 05:39
sazi

総合スコア25327

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

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

hana15

2024/12/04 05:51

回答ありがとうございます。 ②の参考サイトが難しくてよく理解出来なかったのですが、詳しく教えて頂くことは可能でしょうか?
sazi

2024/12/04 06:15

copyコマンドで重複を無視する事できないので、重複しないものだけをinsertしましょうという事になります。 要約すると、 ①insert into on confrictを使用して重複を無視する。 ②①を行うためにCSVファイルを一時テーブルに格納して利用する。 という事になります。
hana15

2024/12/05 01:21

詳しく教えて頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問