PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

No PostgreSQL, como inserir dados com o comando COPY?

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 , ou pg_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