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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.