postgresql: come posso scaricare e ripristinare i ruoli per un cluster?


27

Dove sono memorizzati i ruoli in un cluster e come posso scaricarli?

Ho fatto un pg_dump di un db e poi l'ho caricato in un cluster diverso, ma ottengo molti di questi errori:

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

Quindi apparentemente la discarica del mio db non include ruoli. Ho provato a scaricare il db "postgres", ma non vedo nemmeno i ruoli lì.

Devo usare pg_dumpall --roles-only?

Postgresql versioni 8.4.8 e 9.1.4 OS: Ubuntu 11.04 Natty

Risposte:


37

Dalla CREATE ROLEdocumentazione :

Si noti che i ruoli sono definiti a livello di cluster di database e quindi sono validi in tutti i database nel cluster.

Poiché pg_dumpesegue il dump di un singolo database, non è possibile estrarre ruoli con tale utilità. Il pg_dumpall --roles-onlycomando che hai proposto farà il lavoro, tuttavia potrebbe essere necessario filtrarne l'output in modo che solo i ruoli desiderati vengano creati nel nuovo cluster.

I ruoli sono memorizzati nel pg_authidcatalogo, che è fisicamente archiviato nella data/global/sottocartella di un'installazione PostgreSQL, insieme alle altre tabelle a livello di cluster. È possibile eseguire una query sul contenuto di pg_authidattraverso la pg_rolesvista.

NOTA : per scaricare i ruoli saranno necessari i diritti di superutente. In caso contrario, si otterrebbe un permesso negato in SELECTsu pg_authid- e anche quando un superuser concede SELECTi diritti, si otterrebbe lo stesso errore. In questo caso, tuttavia, è possibile elencare i ruoli eseguendo una query pg_authiddirettamente, COPYin un file e ruotare un po 'di magia per creare le istruzioni CREATE ROLEe le ALTER ROLEistruzioni necessarie .


Puoi aggiungere come ripristinare tutti i ruoli (ovvero non è necessario alcun filtro)?
Ethan Furman,

1
per ripristinare tutti i ruoli, basta copiare e incollare l'output pg_dumpall --roles-onlynella shell psql desiderata. O specifiche CREATE ROLEe ALTER ROLElinee
Fernando Fabreti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.