Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump)

- Πώς ενεργοποιούμε το Data Masking σε PostgreSQL - 16 Σεπτέμβριος 2026
- Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump) - 14 Σεπτέμβριος 2026
- Πώς βρίσκουμε τα Missing Indexes σε PostgreSQL - 11 Σεπτέμβριος 2026
Όσοι προερχόμαστε από τον κόσμο της Oracle και το Data Pump (expdp/impdp), σε αυτό το άρθρο θα δούμε τα αντίστοιχα εργαλεία της PostgreSQL pg_dump και pg_restore. Τα εργαλεία αυτά μας επιτρέπουν να τρέξουμε αυτές τις διεργασίες με παράλληλα threads, μεμονομένα schemas και πίνακες αποφεύγοντας ταυτοχρονα τυπικές παγίδες οπως τα Primary Key violations.
Ας δούμε πρακτικά μερικά σενάρια σε πραγματικό περιβάλλον.
Bulk Export (pg_dump)
Για να πάρουμε αντίγραφα ασφαλείας, αξιοποιούμε τις κατάλληλες παραμέτρους ανάλογα με το αν θέλουμε παραλληλία ή στοχευμένο export.
Ολικό Export με Παραλληλία (Directory)
Όταν θέλουμε να εκμεταλλευτούμε πολλαπλά CPU threads -j για να πάρουμε γρήγορα μια ολόκληρη βάση, η PostgreSQL απαιτεί αποκλειστικά το directory format (-F d):
pg_dump -U postgres -d db_test -F d -b -v -j 4 -f /tmp/backup_dir/
-F d: Δημιουργεί έναν φάκελο (προσοχή: δεν πρέπει να υπάρχει προηγουμένως) όπου γράφονται παράλληλα τα κομμάτια του backup.-b: Συμπεριλαμβάνει τα Large Objects (BLOB).-v: Ενεργοποιεί το verbose mode για να βλέπουμε ζωντανά την εξέλιξη.

Export συγκεκριμένου Schema
Αν θέλουμε να απομονώσουμε ολόκληρο το schema public σε ένα συμπιεσμένο custom file (-F c):
pg_dump -U postgres -d db_test -n public -F c -v -f /tmp/backup_dir/public.dump
-n public: Περιορίζει το export αποκλειστικά στα αντικείμενα του συγκεκριμένου schema.
Export συγκεκριμένου Πίνακα
Για να απομονώσουμε μόνο έναν πίνακα (π.χ. τον public.customers):
pg_dump -U postgres -d db_test -t public.customers -F c -v -f /tmp/backup_dir/table_customers.dump
-t public.customers: Στοχεύει αποκλειστικά στον συγκεκριμένο πίνακα.
Έλεγχος Περιεχομένων (Listing)
Πριν προχωρήσουμε σε οποιαδήποτε επαναφορά, μπορούμε να ελέγξουμε τι ακριβώς περιέχει ένα συμπιεσμένο dump αρχείο χωρίς να το επαναφέρουμε, χρησιμοποιώντας την παράμετρο -l (list):
pg_restore -l /tmp/backup_dir/public.dump
Αυτή η εντολή μας τυπώνει όλο το Table of Contents (TOC) με τα αντικείμενα, τα indexes και τα views που είναι αποθηκευμένα μέσα στο αρχείο.

Bulk Import (pg_restore)
Κατά το import, το μεγαλύτερο ζήτημα που συναντάμε συχνά είναι οι διπλότυπες εγγραφές (duplicate key value violates unique constraint) αν οι πίνακες προορισμού περιεχόμενα ήδη δεδομένα. Χρησιμοποιώντας τις παραμέτρους --clean και --if-exists, διασφαλίζουμε ότι τα αντικείμενα καθαρίζονται πριν επαναφημιουργηθούν.
Ολικό Import με Παραλληλία από Directory
Η παρακάτω εντολή επαναφέρει ολόκληρο τον φάκελο παράλληλα (-j 4), κάνοντας καθαρισμό των παλιών αντικειμένων (--clean):
pg_restore -U postgres -d db_test -F d --clean --if-exists -v -j 4 /tmp/backup_dir/

Import συγκεκριμένου Schema
Η παρακάτω εντολή επαναφέρει με ασφάλεια μόνο το schema public, διαγράφοντας τυχόν συγκρουόμενα αντικείμενα που υπήρχαν ήδη:
pg_restore -U postgres -d db_test -n public --clean --if-exists -v /tmp/backup_dir/public.dump
Import συγκεκριμένου Πίνακα από Directory (-F d)
Όταν από ένα τεράστιο ολικό backup θέλουμε να ανακτήσουμε μόνο έναν συγκεκριμένο πίνακα (-t customers), καθαρίζοντας τον προηγούμενο αν υπήρχε τρέχουμε την παρακάτω εντολή:
pg_restore -U postgres -d db_test -t customers -F d --clean --if-exists -v /tmp/backup_dir/
Import συγκεκριμένου Πίνακα από Custom File (-F c)
Αντίστοιχα, αν έχουμε πάρει export μόνο έναν μεμονωμένο πίνακα σε custom compressed αρχείο (-F c), τον επαναφέρουμε στοχευμένα δηλώνοντας το format και φροντίζοντας για τον καθαρισμό (--clean) ώστε να αποφύγουμε συγκρούσεις δεδομένων:
pg_restore -U postgres -d db_test -t customers -F c --clean --if-exists -v /tmp/backup_dir/table_customers.dump

