Acabei de instalar o postgres 9.1.6 em um servidor Ubuntu local. Agora estou tentando restaurar um despejo de banco de dados de um banco de dados no Heroku. O banco de dados local é configurado assim:
sudo -u postgres psql -c "create user app_user with password 'pass';"
sudo -u postgres psql -c "create database app_production owner app_user;"
Agora, quando tento restaurar o dump, uso o seguinte comando:
pg_restore --verbose --schema=public --no-acl --no-owner --jobs=8 --exit-on-error --username=app_user --dbname=app_production /tmp/app_production.dump
Agora, no psql com \l
para ver as propriedades, recebo o seguinte:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------------+-----------+----------+-------------+-------------+-----------------------
app_production | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
Como você pode ver, a propriedade do banco de dados app_production mudou de app_user para postgres. Eu esperava que o proprietário do banco de dados app_production ainda fosse app_user, então o que estou fazendo de errado?
BTW, o --schema=public
foi adicionado, porque eu estava recebendo um erro estranho:
"Não foi possível executar a consulta: ERRO: deve ser o proprietário da extensão plpgsql"
Outra coisa é que o dono do dump é o usuário que o banco de dados estava tendo no heroku, que seria algo como'jebf473b73bv73v749b7'
Se você deseja criar a extensão plpgsql, acredito que seja o Superusuário. Minha recomendação é tornar app_user temporariamente um superusuário e depois reverter isso. Os superusuários também são tratados como donos de tudo.
execute a restauração e, quando terminar
Isso deve evitar quaisquer outros problemas de permissão, mas ainda deixar você com as permissões que deseja.