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を使用する方法