Onde as funções são armazenadas em um cluster e como faço para despejá-las?
Fiz um pg_dump de um db e carreguei-o em um cluster diferente, mas recebo muitos desses erros:
psql:mydump.sql:3621: ERROR: role "myrole" does not exist
Então, aparentemente, o dump do meu db não inclui funções. Eu tentei despejar o banco de dados 'postgres', mas também não vejo os papéis lá.
Eu preciso usar pg_dumpall --roles-only
?
Postgresql versões 8.4.8 e 9.1.4 SO: Ubuntu 11.04 Natty
Da
CREATE ROLE
documentação :Como
pg_dump
despeja um único banco de dados, você não pode extrair funções com esse utilitário. Opg_dumpall --roles-only
comando que você propôs fará o trabalho - no entanto, pode ser necessário filtrar sua saída para que apenas as funções desejadas sejam criadas no novo cluster.As funções são armazenadas no
pg_authid
catálogo, que é fisicamente armazenado nadata/global/
subpasta de uma instalação do PostgreSQL, junto com as outras tabelas do cluster. Você pode consultar o conteúdo depg_authid
através dapg_roles
exibição.NOTA : você precisará de direitos de superusuário para despejar as funções. Caso contrário, você obteria uma permissão negada em
SELECT
-pg_authid
e mesmo quando um superusuário concederSELECT
direitos, você obteria o mesmo erro. Nesse caso, no entanto, você pode listar os papéis consultando -ospg_authid
diretamenteCOPY
em um arquivo e rolar alguma mágica para criar as instruçõesCREATE ROLE
e necessáriasALTER ROLE
.