COPY tbl FROM STDIN;
pgAdminではサポートされていません。
PostgresはデータをSQLコードとして取得するため、単純な構文エラーが発生します。
4つ 考えられる解決策:
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を使用する 。関連:
- PostgreSQLテーブルから特定の行をINSERTSQLスクリプトとしてエクスポートします
2。 または、 psqlを使用してコマンドラインでスクリプトを呼び出します 。システムユーザーとしてpostgres :
psql -f beer.sql -U my_login_role -d db_name
データベース( -d )およびログインロール( -U デフォルトで問題がない場合は、「ユーザー」の場合は省略できます。構文例:
- [template]、[encoding]、[owner]を含むバッチファイルと.sqlファイルを使用してPostgresデータベースを作成します
データの終わりマーカー(\。)があることを確認してください )デフォルトの text フォーマット。 (あなたはそれを持っています。)マニュアル:
データの終わりは、justbackslash-period(
\。を含む1行で表すことができます。 )。ファイルの終わりは完全に機能するため、ファイルから読み取るときにデータの終わりマーカーは必要ありません。 3.0より前のクライアントプロトコルを使用してクライアントアプリケーションとの間でデータをコピーする場合にのみ必要です。
3。 または、データをサーバー上の別のファイルに移動します 、「beer_data.csv」と言い、 COPY .. FROM'filename'を使用します スクリプト内:
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';
どちらの方法でも機能します。ただし、スーパーユーザー権限が必要です。マニュアル:
[...]
コピーコード> ファイルまたはコマンドの命名は、データベースのスーパーユーザーまたはデフォルトの役割の1つが付与されているユーザーにのみ許可されます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を使用 。参照:
- PostgresのCSVファイルの値で選択した行を更新するにはどうすればよいですか?
- pgadmin4を使用してpostgresqlで\copyを使用する方法