Existe uma maneira de exportar dados da tabela postgres como json para um arquivo? Eu preciso que a saída seja linha por linha, como:
{'id':1,'name':'David'}
{'id':2,'name':'James'}
...
EDIT: versão postgres: 9.3.4
Existe uma maneira de exportar dados da tabela postgres como json para um arquivo? Eu preciso que a saída seja linha por linha, como:
{'id':1,'name':'David'}
{'id':2,'name':'James'}
...
EDIT: versão postgres: 9.3.4
Tente aqui para uma introdução básica para
PostgreSQL
eJSON
.Além disso, a documentação do PostgreSQL é muito boa, então experimente aqui . Confira a
pretty_bool
opção.Sua pergunta original era "Existe uma maneira de exportar dados da tabela postgres como
JSON
". Você queria neste formatoEu não tinha uma instância em execução,
PostgreSQL
então baixei, compilei e instalei o 9.4.Para responder a isso, primeiro
CREATE
ed uma tabela (fred)Em seguida, para verificar:
Então eu emiti este comando
Saí do psql e listei o arquivo myfile.
(você pode experimentar com a saída de
quando quiser).
Foi apontado por @offby1 que a saída (enquanto corresponde à pergunta do OP) não está correta
JSON
. @EvanCarroll apontou que\o
também é uma maneira de enviar para um arquivo, então combinei as soluções para essas duas imperfeições nesta declaração (com ajuda daqui ):dá:
FINALMENTE , há o
\
problema da barra invertida ( ) mencionado por @AdamGent em seu post. Isso foi um pouco complicado, mas é possível sem recorrer ao processamento pós-consulta. Voilà:E usando REGEXP_REPLACE assim (observe o cast ::TEXT) remove as barras pretas em excesso.
dá:
(ps Quanto ao comentário de @Zoltán - isso pode ser uma coisa de versão - incapaz de reproduzir!).
Se você estiver usando
psql
, não há motivo para usar\COPY
.Este é o mesmo método que usamos para tirar png/jpgs/tifs do banco de dados com PostGIS para testes rápidos e também para gerar arquivos de script com extensões PostgreSQL.
Por favor, encontre abaixo a única resposta que gera um JSON realmente válido (ou seja, matriz de objetos).
( fonte )
Para mim, a resposta de @Vérace não manteve os nomes das colunas, mas atribuiu nomes padrão (
f1
,f2
, etc.) em vez disso. Estou usando o PostgreSQL 9.1 com a extensão JSON .Se você deseja exportar a tabela inteira, não há necessidade de uma subconsulta. Além disso, isso manterá os nomes das colunas. Usei a seguinte consulta:
Vou adicionar uma ressalva especial à resposta de Verace . Você precisa fazer o pós-processamento no arquivo JSON de saída se tiver colunas de texto com caracteres de barra invertida:
\
.Caso contrário, você obterá duplicado (
\
->\\
) na melhor das hipóteses e JSON completamente inválido na pior das hipóteses, ou seja:Este:
Torna-se
O que parece bom, mas é JSON completamente inválido.
Você pode substituir o
\\
into\
por sed:Do Postgres COPY onde eles mencionam:
Para uma solução genérica (MySQL, Postgres, SQLite..) e gratuita para a qual você não precisa instalar nenhum software (exceto o Docker), consulte https://github.com/function61/sql2json
Divulgação completa: eu escrevi esse software.
Isso é muito fácil de conseguir com spyql :
Estamos usando o psql para exportar uma consulta/tabela para CSV e, em seguida, o spyql para converter as linhas CSV em json.
Para o registro, criei uma tabela de amostra com o seguinte comando SQL:
Isenção de responsabilidade: eu sou o autor do spyql
Variante da resposta de @gunar-gessner com mas com arquivo de saída especificado embutido