COPY tbl FROM STDIN;
não é suportado pelo pgAdmin.
Você recebe um erro de sintaxe simples porque o Postgres obtém os dados como código SQL.
Quatro soluções possíveis:
1. Use um
INSERT
de várias linhas em vez de: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')
;
Observe a sintaxe diferente (SQL) para valores como string ou literais numéricos.
Você pode gerar os dados com
pg_dump
usando --inserts
. Relacionado:- Exportar linhas específicas de uma tabela PostgreSQL como script INSERT SQL
2. Ou chame seu script na linha de comando usando
psql
. Como usuário do sistema postgres
:psql -f beer.sql -U my_login_role -d db_name
Banco de dados (
-d
) e função de login (-U
para "Usuário") pode ser omitido se os padrões estiverem corretos. Exemplos de sintaxe:- Criar banco de dados Postgres usando arquivo em lote com [modelo],[codificação],[proprietário] e um arquivo .sql
Certifique-se de que haja um marcador de fim de dados (
\.
) para o text
padrão formato. (Você tem isso.) O manual:
O fim dos dados pode ser representado por uma única linha contendo justbackslash-period (\.
). Um marcador de fim de dados não é necessário na leitura de um arquivo, pois o fim de arquivo serve perfeitamente; é necessário apenas ao copiar dados de ou para aplicativos cliente usando o protocolo cliente anterior ao 3.0.
3. Ou mova seus dados para um arquivo separado no servidor , diga 'beer_data.csv' e use
COPY .. FROM 'filename'
em seu roteiro:COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';
O que funciona de qualquer maneira. Você precisa de privilégios de superusuário, no entanto. O manual:
[...]COPY
nomear um arquivo ou comando só é permitido a superusuários do banco de dados ou usuários que recebem uma das funções padrãopg_read_server_files
,pg_write_server_files
, oupg_execute_server_program
, pois permite ler ou escrever qualquer arquivo ou executar um programa que o servidor tenha privilégios de acesso.
(
pg_read_server_files
, pg_write_server_files
e pg_execute_server_program
são novos no Postgres 11.) 4. Ou leia um arquivo local para o cliente com o meta-comando psql
\copy
. Ver:- Como atualizar linhas selecionadas com valores de um arquivo CSV no Postgres?
- Como usar \copy no postgresql com pgadmin4