2015-07-17 16 views
32

ho fatto backup del database sul server diverso e che ha il ruolo diverso da quello che ho bisogno, con questo comando:Postgresql - database di backup e ripristino su proprietario diverso?

pg_dump -Fc db_name -f db_name.dump 

Poi ho copiato backup su un altro server in cui ho bisogno di ripristinare il database, ma non v'è tale proprietario che è stato usato per quel database. Diciamo che il database ha il proprietario owner1, ma su un altro server ho solo owner2 e ho bisogno di ripristinare quel database e cambiare proprietario.

Quello che ho fatto su un altro server per il ripristino:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump 

Ma quando il ripristino viene eseguito ottengo questi errori:

pg_restore: [archiver (db)] could not execute query: ERROR: role "owner1" does not exist 

Come posso specificare in modo che sarebbe cambiare il proprietario? O è impossibile?

risposta

47

È necessario utilizzare l'opzione --no-owner, che arresta pg_restore cercando di impostare la proprietà degli oggetti sul proprietario originale. Invece gli oggetti saranno di proprietà dell'utente specificato da --role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump 

pg_restore doc

+5

'pg_dump --no-owner' dovrebbe anche farlo –

+3

La mia preferenza è quella di rinviare questo genere di decisioni fino al ripristino. Se lo fai nella fase di scarico, significa che non puoi cambiare idea senza esportare. Farlo al ripristino significa che le opzioni sono lasciate aperte nel caso in cui si decida che si dovrebbe aver creato quel ruolo mancante ecc. – Gary

+0

Quindi, se voglio cambiare proprietario, devo eseguire il backup senza proprietario? Perché pensavo di poter cambiare proprietario durante il restauro. Ma anche impostando '--role' su un altro proprietario, stava ancora cercando di usare il proprietario originale (ma poi non ho usato' --no-owner'. – Andrius