Uso de COPY FROM STDIN no postgres

14

Comecei a usar o Postgres e estou tentando criar um exemplo de banco de dados para entender suas funções. Olhando em volta, encontrei alguns scripts no pgfoundry.org. Eu entendo os comandos, pois usei anteriormente o Oracle e o MS-SQL, mas todos os scripts que estou executando retornam erros quando eles atingem a instrução "COPY FROM". Mais precisamente, o erro é lançado no primeiro elemento que deve ser inserido na tabela fornecida.

Tentei executar os scripts como consultas e como pgScripts, mas nos dois sentidos estou recebendo um erro na primeira linha após o COPY FROM.

Estou usando o pgAdminIII e usei o StackBuilder para instalar o PostgreSQL 9.2.4.1 como um driver de banco de dados. Posso estar perdendo alguma configuração básica que está me impedindo de executar este comando ou simplesmente não entendi como elas funcionam?

EDIT:
O erro é:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

onde o texto está:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Eugenio Laghi
fonte
1
Bem-vindo ao dba.SE. Você precisa incluir a mensagem de erro (literalmente) com uma pergunta como essa. Se o seu código do idioma não for inglês, você poderá redefini-lo em sua sessão antes de executar o script para receber mensagens de erro em inglês padrão: SET lc_messages = CApenas execute-o na janela do editor SQL, que "contém" uma sessão.
Erwin Brandstetter
Obrigado, estou tentando descobrir como alterar meu código de idioma. Incluirei a mensagem de erro assim que descobrir como fazer isso.
Eugenio Laghi
1
Ah, esqueci aspas simples: SET lc_messages = 'C'.
Erwin Brandstetter

Respostas:

10

O pgScript é uma extensão de script local do pgAdmin, que você provavelmente não deseja aqui.

O pgAdmin é uma GUI, não um aplicativo de console - não existe um que stdinvocê possa usar facilmente. Se você precisar stdintransmitir seu conteúdo, use psql, que é um aplicativo de console - com o \copymeta-comando psql .

Se você possui um arquivo (o que obviamente faz), basta usar o SQL COPYno pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

O arquivo precisa ser legível para o postgresusuário do sistema.

Mais informações nesta solicitação intimamente relacionada à lista de suporte do pgAdmin .

Erwin Brandstetter
fonte
ok, você quer dizer que eu deveria executar o script com uma linha como psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql:? Além disso, estou apenas tentando tudo localmente, acabei de instalar o pgAdmin no meu laptop.
Eugenio Laghi
1
@EugenioLaghi: Não exatamente. psql -fexecutaria um arquivo de script SQL. Você parece lidar com um arquivo de dados . Eu atualizei minha resposta.
Erwin Brandstetter
OBRIGADO! No começo, eu estava tentando executar um script, mas agora pelo menos eu descobri como copiar dados de um arquivo! Ontem à noite eu estava muito cansada para entender .. :)
Eugenio Laghi
Como você garante que o usuário do postgres possa ler o arquivo. Eu fiz isso acontecer para o arquivo txt, mesmo para minha área de trabalho (onde o arquivo está localizado), mas a permissão ainda é negada.
@Geo: Por favor, começar uma nova pergunta incluindo a versão Postgres, OS, onde as mentiras de arquivo, o comando verbatim você usou e mais se for o caso ...
Erwin Brandstetter