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
. Свързано:
- Експортирайте конкретни редове от PostgreSQL таблица като INSERT SQL скрипт
2. Или извикайте своя скрипт от командния ред, като използвате psql
. Като системен потребител postgres
:
psql -f beer.sql -U my_login_role -d db_name
База данни (-d
) и роля за влизане (-U
за „Потребител“) може да се пропусне, ако настройките по подразбиране са наред. Примери за синтаксис:
- Създайте база данни Postgres с помощта на пакетен файл с [шаблон], [кодиране], [собственик] и .sql файл
Уверете се, че има маркер за край на данните (\.
) за text
по подразбиране формат. (Имате това.) Ръководството:
Краят на данните може да бъде представен с един ред, съдържащ период на наклонена черта (
\.
). Маркер за край на данните не е необходим при четене от файл, тъй като краят на файла служи перфектно; необходимо е само при копиране на данни към или от клиентски приложения, използващи клиентски протокол преди версия 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_read_server_files
, pg_write_server_files
и pg_execute_server_program
са нови в Postgres 11.)
4. Или прочетете локален файл на клиента с метакомандата psql \copy
. Вижте:
- Как да актуализирам избрани редове със стойности от CSV файл в Postgres?
- Как да използвам \copy в postgresql с pgadmin4