ฉันจะย้ายพื้นที่ตาราง PostgreSQL ได้อย่างไร


12

มีวิธีที่จะย้ายร่างกาย PostgreSQL 9.3 ตารางจาก/old/dirไป/new/dir? ฉันต้องการเพียงแค่mvไดเรกทอรีและบอกว่า PostgreSQL /new/dirตารางอยู่ในขณะนี้อยู่ที่ ดูเหมือนว่าALTER TABLESPACEให้คุณเปลี่ยนชื่อได้เท่านั้น

ฉันต้องการหลีกเลี่ยงการสร้างพื้นที่ตารางใหม่และย้ายฐานข้อมูลไป ฉันคิดว่าจะเป็นกระบวนการคัดลอกช้าที่ต้องใช้เวลาและพื้นที่ดิสก์ ฉันยังต้องการที่จะหลีกเลี่ยง symlinking ไป/old/dir/new/dir


ย้าย / old / dir ไปที่ veryold / dir, เมานต์ใหม่ / dir เป็น old / dir, คัดลอกข้อมูลจาก ver_old dir เป็น old / dir หรือไม่?
simplexio

คำตอบ:


12

ฉันคิดว่า tablespace tblspcชื่อของคุณ

  1. รับ Oid ของพื้นที่ตารางของคุณ
ทดสอบ = # เลือก oid, spcname จาก pg_tablespace WHERE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 แถว)
  1. หยุด postgres
$ pg_ctl -D $ PGDATA หยุด
  1. ย้ายไดเรกทอรีจากอันเก่าไปใหม่
$ mv / เก่า / dir / ใหม่ / dir

หรือ

$ cp -r / old / dir / new / dir
$ rm -rf / old / dir
  1. เปลี่ยนลิงค์ของ tablespace เป็นไดเรกทอรีใหม่
$ cd $ PGDATA / pg_tblspc
$ rm 24580
$ ln -s / new / dir 24580
  1. เริ่ม postgres
$ pg_ctl -D $ PGDATA เริ่มต้น

จากนั้นคุณสามารถเห็นไดเรกทอรีของ tablespace ได้เปลี่ยนไป

ทดสอบ = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / / dir ใหม่
(1 แถว)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.