PostgreSQLデータベースで1つのプロジェクトNodeJを実行すると問題が発生します。 COPY
コマンドを使用してpgAdminにデータを挿入しようとするとエラーが発生します。
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image) FROM stdin;
Bons Voeux blonde 9.5 Brasserie Dupont 250 130 generic.png
Gist :のこのデータ
このエラー:
ERROR: syntax error at or near "Bons"
SQL state: 42601
Character: 1967
COPY tbl FROM STDIN;
pgAdminではサポートされていません。
PostgresはデータをSQLコードとして取得するため、単純な構文エラーが発生します。
Four 可能な解決策:
1.代わりに複数行のINSERT
を使用します。
INSERT INTO beer(name, tags, alcohol, brewery, id, brewery_id, image)
VALUES
('Bons Voeux', 'blonde', 9.5, 'Brasserie Dupont', 250, 130, 'generic.png')
, ('Boerke Blond', 'blonde', 6.8, 'Brouwerij Angerik', 233, 287 'generic.png')
;
文字列または数値リテラルとしての値の異なる(SQL)構文に注意してください。
pg_dump
を使用して--inserts
でデータを生成できます。関連:
2.または、psql
を使用してコマンドラインでスクリプトを呼び出します。システムユーザーpostgres
として:
psql -f beer.sql -U my_login_role -d db_name
データベース(-d
)およびログインロール(「ユーザー」の場合は-U
)は、デフォルトで問題ない場合は省略できます。構文例:
デフォルトのtext
形式には、データ終了マーカー(\.
)があることを確認してください。 (それがあります。) マニュアル:
データの終わりは、バックスラッシュとピリオド(
\.
)のみを含む1行で表すことができます。ファイルの終わりは完全に機能するため、ファイルから読み取るときにデータの終わりマーカーは必要ありません。 3.0より前のクライアントプロトコルを使用してクライアントアプリケーションとの間でデータをコピーする場合にのみ必要です。
3.またはデータをサーバー上の別のファイルに移動する/server 、たとえば「beer_data.csv」とスクリプトでCOPY .. FROM 'filename'
を使用します。
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';
どちらの方法でも機能します。ただし、スーパーユーザー権限が必要です。 マニュアル:
[...]
COPY
ファイルまたはコマンドの命名は、データベースのスーパーユーザー、またはデフォルトのロールpg_read_server_files
、pg_write_server_files
、またはpg_execute_server_program
のいずれかを付与されたユーザーにのみ許可されます、これは任意のファイルの読み取りまたは書き込み、またはサーバーがアクセスする特権を持っているプログラムの実行を許可するためです。
(pg_read_server_files
、pg_write_server_files
、およびpg_execute_server_program
はPostgres 11で新しく追加されました。)
4.または client のローカルファイルを psqlメタコマンド\copy
で読み取ります。見る:
最初の一歩:
pgAdminでデータベースbelgianbeersを作成します。
2番目のステップ:プロンプトを開き、次のコマンドラインを実行します。
psql -U postgres -d belgianbeers -a -f beers.sql
データベーステーブルを更新するこのコマンドライン。
-U =ユーザー名postgres