Estou tentando despejar algumas tabelas de um servidor 9.5 beta 2 para um servidor 9.4.4. A forma do comando que estou usando é bastante padrão:
pg_dump -t table dbname | psql -h hostname -d dbname
Estou usando o usuário do Postgres, o que eu percebo que provavelmente não é o ideal, mas como essas são as duas caixas de processamento de dados de desenvolvimento que apenas eu uso e são relevantes para o erro a seguir. Inicialmente, recebi o erro
ERRO: parâmetro de configuração não reconhecido "row_security"
o que é esperado, já que esse recurso é novo na versão 9.5 e, sim, eu percebo que não é aconselhável pg_dump entre diferentes versões do Postgres, mas, infelizmente inevitável, já que encontrei um bug muito obscuro e preciso mover um grande quantidade de dados estáticos uma vez.
Portanto, usando esse hack hediondo para remover o erro row_security e ativando o stop no primeiro erro:
pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname
Agora eu recebo:
ERRO: permissão negada para criar "pg_catalog.tablename" DETALHE: as modificações no catálogo do sistema não são permitidas no momento
Embora possa ser indesejável usar a função / usuário do Postgres, meu entendimento é que não deve haver problemas de permissão dessa natureza. Estou aberto a sugestões, considerando que essa é uma operação pontual e que essas são caixas de desenvolvimento de processamento de dados não conectadas a nenhum serviço ativo, portanto, a conveniência é preferível às políticas ideais de acesso a dados corporativos. Dito isto, seria bom entender como fazer isso corretamente e evitá-lo no futuro.