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

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

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

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

Q&A

0回答

188閲覧

PostgreSQLでCOPY ~ FROM命令を使用したときにエラーになる

telephoneman

総合スコア0

PostgreSQL

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

0グッド

0クリップ

投稿2025/04/09 01:23

編集2025/04/09 02:35

実現したいこと

テーブル:DATA_TABLEへCSV:DATA.CSVのレコードを追加したいです。

発生している問題・分からないこと

実行すると以下のエラーメッセージが出ました。

エラーメッセージ

error

1SET 2psql.exe:C:\DATFIL_UPDATE02.sql:5: \copy: parse error at 'delimites'

該当のソースコード

SQL

1set client_encoding TO 'SJIS'; 2\COPY DATA_TABLE FROM 'C:\DATA.CSV' delimiters ',';

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

■試したこと1
'delimiters'を外して以下の命令を実行しました。
命令:\COPY DATA_TABLE FROM 'C:\DATA.CSV';
すると以下のエラーが出ました。
psql.exe:C:\DATFIL_UPDATE02.sql:5: \copy: parse error at ';'
delimitersが構文エラーではない・・・?
■試したこと2
COPY命令の""を付けるのと付けないのを試しました。
付けないと、CSVファイルのアドレスが不明のようなエラーが発生
■試したこと3
TOとFROMで試しました。
両者、同様の結果となりました。
■試したこと4
Truncate文とSELECT文を使用してDATA_TABLEへの接続ができているか試しました。
結果、両方の命令は正常に動作しました。
■試したこと5(追加です)
copyのヘルプを試したらdelimitersではなくdelimiterだったので変更しました。
しかし、エラーの内容は変わりませんでした。

補足

環境としては以下となります。

■環境
サーバーA  :PostgreSQLのテーブルが格納されているサーバー
クライアントB:今回のエラーが発生しているクライアント

サーバーAでは全く同じCOPY命令が実行できます。
クライアントBでは実行できないため実行環境の問題なのかな・・・とも思っています。

■PostgreSQLのバージョン
PostgreSQL 9.3.7, compilid by Visual C++ build 1600, 64-bit

■COPYの構文

Description: copy data between files and tables
Syntax:
COPY table [ ( column [, ...] ) ]
FROM { 'filename' | stdin }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ] ]
COPY table [ ( column [, ...] ) ]
TO { 'filename' | stdout }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ] ]

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

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

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

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

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

MasahikoHirata

2025/04/09 01:56

\copy table_name FROM 'C:\DATA.CSV' WITH DELIMITER ',' CSV; ではどうですか?
telephoneman

2025/04/09 02:05

回答ありがとうございます! 変更したところエラーメッセージが以下のように変わりました。 psql.exe:C:\JS\DATFIL_UPDATE02.sql:7: \copy: parse error at 'CSV;' バージョンも調べてみました。 PostgreSQL 9.3.7, compilid by Visual C++ build 1600, 64-bit
MasahikoHirata

2025/04/09 02:16

では \copy テーブル名 FROM 'ファイルパス' WITH DELIMITER (FORMAT CSV); では?
telephoneman

2025/04/09 02:29

ご回答ありがとうございます。 変更したところエラーメッセージが以下のように変わりました。 psql.exe:C:\JS\DATFIL_UPDATE02.sql:7: \copy: parse error at 'CSV);' この書き方にするとdelimiterでエラーが出ないのが不思議です
MasahikoHirata

2025/04/09 02:40

WITH以降を (FORMAT csv, DELIMITER ',', HEADER); にしてみてください。
telephoneman

2025/04/09 02:45

ご回答ありがとうございます。 変更したところエラーメッセージが以下のように変わりました。 psql.exe:C:\JS\DATFIL_UPDATE02.sql:7: \copy: parse error at '(FORMAT'
bsdfan

2025/04/09 07:02 編集

エラーが起きている部分に、web等からコピペで入力したときに不可視の変な文字が入っているなどの可能性はないでしょうか。 あと、copy と \copy は違うコマンドなので注意してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問