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 Postgres, que provavelmente não é o ideal, mas como são duas caixas de processamento de dados de desenvolvimento que só eu uso e é relevante para o erro que se segue. Inicialmente, recebi o erro
ERRO: parâmetro de configuração não reconhecido "row_security"
o que é esperado, pois esse recurso é novo no 9.5 e, sim, percebo que não é aconselhável pg_dump entre diferentes versões do Postgres, mas, infelizmente inevitável, visto que encontrei um bug muito obscuro e preciso mover um grande quantidade de dados estáticos uma vez.
Portanto, usando este hack hediondo para remover o erro row_security e ativando a parada no primeiro erro:
pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname
Eu agora recebo:
ERRO: permissão negada para criar "pg_catalog.tablename" DETALHE: as modificações do catálogo do sistema não são permitidas no momento
Embora possa ser indesejável usar o usuário/função do Postgres, entendo que não deve haver problemas de permissão dessa natureza. Estou aberto a qualquer sugestão, tendo em mente que esta é uma operação única e que são caixas de desenvolvimento de processamento de dados não conectadas a nenhum serviço ao vivo, portanto, a conveniência é preferida às políticas ideais de acesso a dados corporativos. Dito isto, seria bom entender como fazer isso corretamente e evitar isso no futuro.