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:
[...]COPYnomear 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