Postgresql verilerini farklı bir sürücüye taşıma


20

AWS'yi bulut ortamım olarak kullanıyorum. PostgreSQL'i kök örnek birimimle aynı sürücüye yükledim. İkinci sürücüyü örneğime takıp taktım. Şimdi tüm PostgreSQL verilerimi farklı bir sürücüye taşımak istiyorum. Hala geliştirme modundayım, bu nedenle aktarımı bu noktada kolaylaştırırsa eski verileri silebilirim. Bunu yapmanın en iyi yolu nedir?

PostgreSQL tablo alanı bakmam gereken bir şey mi?


1
Veritabanlarınızın bir kısmını ayrı bir sürücüye taşımak istiyorsanız, tablo alanları gitmek için bir yol olacaktır .
Erwin Brandstetter

Bu cevap düşündürmektedir tablespacesgerekir DEĞİL : harici bir sabit diske devam dba.stackexchange.com/a/62037/41823 emin Riski anlayana zaten harici verileri koyuyoruz olur?
Statwonk

Yanıtlar:


19

Aşağıdakiler bunu yapmalıdır:

  1. PostgreSQL'i kapat
  2. PostgreSQL'in artık çalışmadığından emin olun
  3. PostgreSQL'in gerçekten durdurulduğunu kontrol edin
  4. Eski veri dizinini yeni sürücüye kopyalama
    Bu genellikle -Dhizmetiniz için bir komut satırı parametresi ( ) veya PGDATAortam değişkeni ile tanımlanır.
  5. PostgreSQL yapılandırmanızı (hizmet, ortam değişkeni) yeni veri dizinine işaret edecek şekilde güncelleyin.
  6. Verileri kopyaladıysanız, PostgreSQL'in artık bulamadığından emin olmak için eski veri dizinini yeniden adlandırın. Bu şekilde, yapılandırmayı doğru alamadıysanız bir hata mesajı alırsınız.
  7. Hizmeti başlat
  8. Her şey yolunda giderse, eski dizini silebilirsiniz.

Dördüncü noktada, 'Bu genellikle bir komut satırı parametresi ile tanımlanır ...' ile ne demek istiyorsun?
codecool

@codecool: bunun tanımlanmasının birkaç farklı yolu vardır. Genellikle hizmet tanımının bir parçasıdır. Ancak işletim sisteminize, dağıtımınıza ve kişisel değişikliklerinize bağlıdır.
a_horse_with_no_name

Bu çalıştı ama Windows için komut satırı yerine regedit kullandım. Whew. Disketimde yer tükenmek üzereydi, ancak artık yeterli alana sahip başka bir yerde güvenle çalışıyorum.
hendek

İşte belirli ayrıntılar, tipik ubuntu ve 9.5 DB sürümü için güncel güzel adım adım blog yazısı: digitalocean.com/community/tutorials/…
JaakL

4
  1. Postgresql hizmetini durdur
  2. cp -a kaynak_veri_dizini hedef_veri_dizini
  3. chown -R postgres_user / destination_data_directory
  4. PGDATA'yı dışa aktar = hedef_veri_dizini
  5. Veri dizinini postgresql.conf içinde destination_data_directory olarak değiştirme
  6. pg_ctl başlangıç

chownYeni klasörün komutunu hatırladığınıza sevindim .
RolandoMySQLDBA

0

Arch Linux'ta mevcut bir PostgreSQL veritabanının yeni bir konuma (klasör, bölüm) nasıl taşınacağının açıklaması (bu prosedür diğer Linux dağıtımları için benzer olmalıdır).

pg_dumpallbir kümenin tüm PostgreSQL veritabanlarını tek bir komut dosyasına yazmak (boşaltmak) için bir yardımcı programdır. ... Bunu pg_dumpkümedeki her veritabanını çağırarak yapar . ...

Örneğin:

## 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

Gerek:

  • export ( pg_dumpall) veritabanı
  • yeni BOŞ dizini oluştur
  • postgresql.conf dosyasını düzenle
  • postgres sunucu hizmetini yeniden başlat
  • döküm dosyasından eski verileri yeni veritabanına yükle

Komutların özeti

Devam ederken hangi kabuğun içinde olduğumu netleştirmek için kabuk istemlerimi (hostname ...) bırakıyorum.

[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

Misal

Yorumlanan kod ve çıktı için Arch Linux'ta Varolan bir PostgreSQL Veritabanını Taşıma başlıklı blog yazıma bakın. ---


Referanslar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.