Memindahkan data postgresql ke drive yang berbeda

20

Saya menggunakan AWS sebagai lingkungan cloud saya. Saya menginstal PostgreSQL pada drive yang sama dengan volume instance root saya. Saya telah memasang dan memasang drive kedua ke instance saya. Sekarang saya ingin memindahkan semua data PostgreSQL saya ke drive yang berbeda. Saya masih dalam mode pengembangan sehingga saya dapat menghapus data lama jika transfer lebih mudah saat ini. Apa cara terbaik untuk melakukan ini?

Apakah tablespace PostgreSQL sesuatu yang harus saya perhatikan?

codecool
sumber
1
Tablespace akan menjadi cara untuk pergi jika Anda ingin memindahkan bagian dari database Anda ke drive yang terpisah.
Erwin Brandstetter
Jawaban ini menunjukkan bahwa tablespacesseharusnya tidak pergi pada hard drive eksternal: dba.stackexchange.com/a/62037/41823 Tidak yakin saya mengerti risiko jika Anda sudah menempatkan data pada eksternal?
Statwonk

Jawaban:

19

Yang berikut harus melakukannya:

  1. Matikan PostgreSQL
  2. Pastikan PostgreSQL tidak berjalan lagi
  3. Periksa apakah PostgreSQL benar-benar dihentikan
  4. Salin direktori data lama ke drive baru
    Ini biasanya ditentukan melalui parameter commandline ( -D) untuk layanan Anda atau melalui PGDATAvariabel lingkungan.
  5. Perbarui konfigurasi PostgreSQL Anda (layanan, lingkungan var) untuk menunjuk ke direktori data baru.
  6. Jika Anda menyalin data, ganti nama direktori data lama untuk memastikan PostgreSQL tidak dapat menemukannya lagi. Dengan begitu Anda akan mendapatkan pesan kesalahan jika Anda tidak mendapatkan konfigurasi dengan benar.
  7. Mulai layanan
  8. Jika semuanya berjalan dengan baik, Anda dapat menghapus direktori yang lama.
seekor kuda tanpa nama
sumber
Pada poin ke-4, apa yang Anda maksud dengan 'Ini biasanya didefinisikan melalui parameter baris perintah ...'?
codecool
@codecool: ada beberapa cara berbeda bagaimana ini dapat didefinisikan. Biasanya itu bagian dari definisi layanan. Tetapi itu tergantung pada sistem operasi Anda, distribusi dan perubahan pribadi.
a_horse_with_no_name
Ini berhasil tetapi saya menggunakan regedit alih-alih baris perintah untuk Windows. Wah. Disk saya hampir kehabisan ruang tetapi sekarang saya sudah aman beroperasi di tempat lain dengan ruang yang cukup.
parit
Berikut ini adalah posting blog selangkah demi selangkah yang bagus dengan perincian spesifik, terkini untuk ubuntu khas dan versi 9.5 DB: digitalocean.com/community/tutorials/…
JaakL
4
  1. Hentikan layanan postgresql
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. ekspor PGDATA = destination_data_directory
  5. Mengubah direktori data ke destination_data_directory dalam postgresql.conf
  6. pg_ctl mulai
adi
sumber
Saya senang Anda ingat chownperintah untuk folder baru.
RolandoMySQLDBA
0

Berikut ini adalah deskripsi cara memindahkan database PostgreSQL yang ada ke lokasi baru (folder, partisi), di Arch Linux (prosedur ini harus serupa untuk distribusi Linux lainnya).

pg_dumpalladalah utilitas untuk menulis (membuang) semua database PostgreSQL dari cluster ke dalam satu file skrip. ... Melakukan ini dengan memanggil pg_dumpsetiap basis data di kluster. ...

Sebagai contoh:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Kamu butuh:

  • ekspor ( pg_dumpall) basis data
  • buat direktori KOSONG baru
  • edit file postgresql.conf
  • restart layanan server postgres
  • memuat data lama dari file dump ke database baru

Ringkasan perintah

Saya meninggalkan shell saya meminta (nama host ...) untuk mengklarifikasi shell apa yang saya masuki saat saya melanjutkan.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Contoh

Lihat posting blog saya yang menyertai, Bagaimana Memindahkan Database PostgreSQL yang Ada di Arch Linux , untuk kode dan output komentar .---


Referensi

Victoria Stuart
sumber