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

Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump)
Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump)
Τελευταίες δημοσιεύσεις από Stratos Matzouranis (Προβολή όλων)

Όσοι προερχόμαστε από τον κόσμο της 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 για να βλέπουμε ζωντανά την εξέλιξη.
Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump)

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 Export Import στη PostgreSQL (pg_dump)

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/
Πώς κάνουμε Bulk Export Import στη PostgreSQL (pg_dump)

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

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση