В PostgreSQL, как вставить данные с помощью команды COPY?

У меня проблема при запуске 1 проекта NodeJs с базой данных PostgreSQL. У меня ошибка при попытке вставить данные в pgAdmin с помощью команды COPY.

COPY beer (name, tags, alcohol, brewery, id, brewery_id, image) FROM stdin;

Bons Voeux  blonde  9.5 Brasserie Dupont    250 130 generic.png

Эти данные в гисте:

Эта ошибка:

ERROR: syntax error at or near "Bons"
SQL state: 42601
Character: 1967

I was create database like this and execute file .sql:

Ответ 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. Увидеть:

Ответ 2

Первый шаг:

создать базу данных belgianbeers на pgAdmin.

Второй шаг: Откройте приглашение и запустите эту командную строку:

psql -U postgres -d belgianbeers -a -f beers.sql

В этой командной строке запущены таблицы обновлений e update.

-U = имя пользователя postgres