Ответ 1
COPY tbl FROM STDIN;
не поддерживается pgAdmin.
Вы получаете простую синтаксическую ошибку, потому что Postgres получает данные в виде кода SQL.
Четыре возможных решения:
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
формате по умолчанию есть конец маркера -d (\.
). (У вас есть это.) Руководство:
Конец данных может быть представлен одной строкой, содержащей только обратную косую черту (
\.
). Конец маркера -d ata не требуется при чтении из файла, так как конец файла отлично работает; это необходимо только при копировании данных в клиентские приложения или из них с использованием клиентского протокола до версии 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';
Который работает в любом случае. Вам нужны привилегии суперпользователя. Руководство:
[...]
COPY
имен файлов или команд разрешено только суперпользователям или пользователям баз данных, которым предоставлена одна из ролей по умолчанию:pg_read_server_files
,pg_write_server_files
илиpg_execute_server_program
, поскольку она позволяет читать или записывать любой файл или запускать программу,pg_write_server_files
на сервере. привилегии для доступа.
(pg_read_server_files
, pg_write_server_files
и pg_execute_server_program
являются новыми в Postgres 11.)
4. Или прочитайте локальный для клиента файл с помощью метакоманды psql \copy
. Увидеть: