postgresql: como despejo e restauro funções para um cluster?

27

Onde as funções são armazenadas em um cluster e como as despejo?

Eu fiz um pg_dump de um db e o carreguei em um cluster diferente, mas recebo muitos desses erros:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

Então, aparentemente, o despejo do meu banco de dados não inclui papéis. Tentei despejar o banco de dados 'postgres', mas também não vejo as funções lá.

Preciso usar pg_dumpall --roles-only?

Postgresql versões 8.4.8 e 9.1.4 OS: Ubuntu 11.04 Natty

Rob Bednark
fonte

Respostas:

37

A partir da CREATE ROLEdocumentação :

Observe que as funções são definidas no nível do cluster do banco de dados e, portanto, são válidas em todos os bancos de dados no cluster.

Como pg_dumpdespeja um único banco de dados, você não pode extrair funções com esse utilitário. O pg_dumpall --roles-onlycomando 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_authidcatálogo, que é fisicamente armazenado na data/global/subpasta de uma instalação do PostgreSQL, junto com as outras tabelas de todo o cluster. Você pode consultar o conteúdo pg_authidatravés da pg_rolesvisualização.

NOTA : você precisará de direitos de superusuário para despejar as funções. Caso contrário, você terá a permissão negada no SELECTon pg_authid- e mesmo quando um superusuário concede SELECTdireitos, você terá o mesmo erro. Nesse caso, no entanto, você pode listar as funções consultando-as pg_authiddiretamente COPYem um arquivo e rolar alguma mágica para criar as instruções CREATE ROLEe as necessárias ALTER ROLE.

dezso
fonte
Você pode adicionar como restaurar todas as funções (ou seja, sem necessidade de filtragem)?
precisa
11
para restaurar todas as funções, basta copiar e colar a saída pg_dumpall --roles-onlyno shell psql desejado. Ou específico CREATE ROLEe ALTER ROLElinhas #
Fernando Fabreti 07/08/19