Korrekt pg_dump/pg_restore használat hogyan?

Postgresql adatbázist szeretnék megbízhatóan menteni, de nem tökéletes.

Jelenleg a mentéshez a

su - postgres -c "pg_dump -Fc -f $dump_file_name $db"

parancsot használom, visszatöltéshez pedig a

su postgres -c "pg_restore -d $db $dump_file_name"

Azonban ha így csinálom, akkor csak üres adatbázis esetén állítja vissza jól az adatokat. Ha már egyszer visszatöltöttem, és utána újra próbálkozom, akkor már hibát generál. Olyankor a visszatöltés előtt ki kell adnom még a

su postgres -c "dropdb $db"
su postgres -c "createdb $db -O $dbuser"

parancsokat, hogy rendben megtörténjen a visszatöltés.

Szeretnék úgy menteni, hogy egyetlen paranccsal tudjak visszaállítani, függetlenül attól, hogy üres-e az adatbázis előtte, vagy sem.

Próbáltam a -c és a -C kapcsolók minden variációját a pg_restore parancsnál, de egyik sem segített.

Mi a korrekt módja a postgresql adatbázisok mentésének és visszatöltésének?

Hozzászólások

Pontosítottam a leírást, mivel a -c és -C kapcsolókat csak a pg_restore parancsnál használtam.

A -c esetén semmit, csak nem az adatbázist használó program futásánál keletkeznek hibák, most pontosan nem emlékszem, de valami olyan, hogy nem tudja elérni az adott adatot.

A -C esetén pedig

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 185; 1259 66723 TABLE *** ***
pg_restore: [archiver (db)] could not execute query: ERROR:  relation "***" already exists

Ha kiadsz egy ilyet:

su - postgres -c "pg_dump -Fc -c -C -f $dump_file_name $db"A scripted elejere odakerul a drop es a create?

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Ha a pg_dump parancs után teszem a -c -C paramétereket is, akkor 150 bájttal nagyobb dumpot kapok, de mindkét dumpban benne van a DROP DATABASE és CREATE DATABASE is.

Hogy mi a különbség a két dump között, azt nem tudom, mert nagyon csúnya formátumú.

A lényeg azonban, hogy ha az új módon mentett adatbázist töltöm vissza, akkor is pont ugyanúgy viselkedik, mint a régi módon mentettel.