ฉันใช้ฐานข้อมูล PostgreSQL สำหรับแอปพลิเคชัน Ruby on Rails ของฉัน (บน Mac OS X 10.9)
มีคำแนะนำโดยละเอียดเกี่ยวกับวิธีอัปเกรดฐานข้อมูล PostgreSQL หรือไม่
ฉันเกรงว่าจะทำลายข้อมูลในฐานข้อมูลหรือทำให้เป็นระเบียบ
ฉันใช้ฐานข้อมูล PostgreSQL สำหรับแอปพลิเคชัน Ruby on Rails ของฉัน (บน Mac OS X 10.9)
มีคำแนะนำโดยละเอียดเกี่ยวกับวิธีอัปเกรดฐานข้อมูล PostgreSQL หรือไม่
ฉันเกรงว่าจะทำลายข้อมูลในฐานข้อมูลหรือทำให้เป็นระเบียบ
คำตอบ:
สมมติว่าคุณใช้ home-brew เพื่อติดตั้งและอัปเกรด Postgres คุณสามารถทำตามขั้นตอนต่อไปนี้
หยุดเซิร์ฟเวอร์ Postgres ปัจจุบัน:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
เริ่มต้นฐานข้อมูล 10.1 ใหม่:
initdb /usr/local/var/postgres10.1 -E utf8
ทำงานpg_upgrade
(หมายเหตุ: เปลี่ยนเวอร์ชั่นถังขยะหากคุณกำลังอัพเกรดจากรุ่นอื่นที่ไม่ใช่ด้านล่าง) :
pg_upgrade -v \
-d /usr/local/var/postgres \
-D /usr/local/var/postgres10.1 \
-b /usr/local/Cellar/postgresql/9.6.5/bin/ \
-B /usr/local/Cellar/postgresql/10.1/bin/
-v
เพื่อเปิดใช้งานการบันทึกภายในแบบละเอียด
-d
ไดเร็กทอรีการกำหนดค่าคลัสเตอร์ฐานข้อมูลเก่า
-D
ไดเร็กทอรีการกำหนดค่าคลัสเตอร์ฐานข้อมูลใหม่
-b
ไดเรคทอรี่เก่าของ PostgreSQL
-B
ไดเรกทอรีปฏิบัติการใหม่ของ PostgreSQL
ย้ายข้อมูลใหม่เข้าที่:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
เริ่ม Postgres ใหม่:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
ตรวจสอบ/usr/local/var/postgres/server.log
รายละเอียดและตรวจสอบว่าเซิร์ฟเวอร์ใหม่เริ่มต้นอย่างถูกต้อง
สุดท้ายติดตั้ง Rails pg
gem ใหม่อีกครั้ง
gem uninstall pg
gem install pg
ฉันขอแนะนำให้คุณใช้เวลาอ่านเอกสาร PostgreSQLเพื่อทำความเข้าใจสิ่งที่คุณทำในขั้นตอนข้างต้นเพื่อลดความผิดหวัง
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.sh
คำสั่ง ฉันได้ลบไดเรกทอรี /usr/local/postgres9.3 ด้วยตนเองก่อนที่จะรันคำสั่งนี้และดูเหมือนว่าฉันจะสูญเสียไดเรกทอรี / usr / local / var / postgres ทั้งหมด (ฉันสามารถกู้คืนได้จาก Time Machine)
gem uninstall pg
แต่แล้วให้ Bundler ติดตั้งรุ่นที่ถูกต้องจาก Gemfile.lock bundle
โดยเพียงแค่การทำงาน
brew
ตอนนี้ยังมีตัวเลือกที่จะใช้brew services stop postgresql
และbrew services start postgresql
โดยตรงแทนการโทรและlaunchctl unload
launchctl load
แม้จะมีคำตอบทั้งหมดข้างต้นนี่ไป 5 เซ็นต์ของฉัน
มันทำงานบนระบบปฏิบัติการใด ๆ และจากรุ่น postgres any-to-any
postgresql.conf
-> port
จาก5432
เป็น5433
;cd
ไปยังbin
โฟลเดอร์เวอร์ชั่นใหม่pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
หรือpg_hba.conf
) คุณจะต้องทำซ้ำการเปลี่ยนแปลงเหล่านั้นด้วยตนเองในการติดตั้งใหม่ แต่ถ้าคุณใช้pg_upgradecluster
ไฟล์กำหนดค่าจะถูกคัดลอกไปยังคลัสเตอร์ใหม่: manpages.ubuntu.com/manpages/precise/man8/ …
pg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Current releases of the dump programs can read data from any server version back to 7.0.
นี่คือทางออกสำหรับผู้ใช้Ubuntu
ก่อนอื่นเราต้องหยุด postgresql
sudo /etc/init.d/postgresql stop
สร้างไฟล์ใหม่ชื่อ /etc/apt/sources.list.d/pgdg.list และเพิ่มบรรทัดด้านล่าง
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
ทำตามคำสั่งด้านล่าง
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main
sudo /etc/init.d/postgresql start
ตอนนี้เรามีทุกสิ่งเพียงแค่อัปเกรดดังต่อไปนี้
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
แค่นั้นแหละ. คลัสเตอร์ที่ได้รับการอัพเกรดส่วนใหญ่จะทำงานบนหมายเลขพอร์ต 5433 ตรวจสอบด้วยคำสั่งด้านล่าง
sudo pg_lsclusters
อัปเดต : กระบวนการนี้เหมือนกันสำหรับการอัปเกรด 9.5 ถึงอย่างน้อย 11.5; เพียงแค่ปรับเปลี่ยนคำสั่งเพื่อให้สะท้อนถึงรุ่น9.6
และ10
ที่9.6
เป็นเก่ารุ่นและ10
เป็นใหม่รุ่น อย่าลืมปรับไดเรกทอรี "เก่า" และ "ใหม่" ด้วย
ฉันเพิ่งอัพเกรด PostgreSQL 9.5 เป็น 9.6 บน Ubuntu และคิดว่าฉันจะแชร์สิ่งที่ค้นพบเนื่องจากมีความแตกต่างของ OS / แพคเกจเฉพาะที่ควรทราบ
( ฉันไม่ต้องการที่จะถ่ายโอนและกู้คืนข้อมูลด้วยตนเองดังนั้นคำตอบอื่น ๆ ที่นี่จึงไม่สามารถใช้งานได้)
กล่าวโดยสรุปกระบวนการประกอบด้วยการติดตั้ง PostgreSQL เวอร์ชันใหม่ควบคู่กับเวอร์ชั่นเก่า (เช่น 9.5 และ 9.6) จากนั้นเรียกใช้pg_upgrade
ไบนารีซึ่งอธิบายรายละเอียด (บางส่วน) ที่https://www.postgresql.org/ เอกสาร
สิ่งที่ "ยุ่งยาก" เท่านั้นpg_upgrade
คือความล้มเหลวในการส่งค่าที่ถูกต้องสำหรับอาร์กิวเมนต์หรือความล้มเหลวในการเข้าสู่ระบบในฐานะผู้ใช้ที่ถูกต้องหรือcd
ไปยังตำแหน่งที่ถูกต้องก่อนดำเนินการคำสั่งอาจทำให้เกิดข้อความแสดงข้อผิดพลาด
บน Ubuntu (และอาจเป็น Debian) หากคุณใช้ repo "เป็นทางการ" deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
และหากคุณไม่ได้เปลี่ยนเส้นทางระบบไฟล์เริ่มต้นหรือตัวเลือกรันไทม์ขั้นตอนต่อไปนี้ควรทำงาน
ติดตั้งเวอร์ชันใหม่ (โปรดทราบว่าเราได้ระบุ9.6
, ชัดเจน):
sudo apt install postgresql-9.6
เมื่อการติดตั้งสำเร็จทั้งสองเวอร์ชันจะทำงานแบบเคียงข้างกัน แต่ใช้พอร์ตต่างกัน ผลลัพธ์การติดตั้งระบุไว้ที่ด้านล่าง แต่มองข้ามได้ง่าย:
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
หยุดเซิร์ฟเวอร์ทั้งสองอินสแตนซ์ (ซึ่งจะหยุดทั้งสองอย่างในเวลาเดียวกัน):
sudo systemctl stop postgresql
เปลี่ยนเป็นผู้ใช้ระบบ PostgreSQL เฉพาะ:
su postgres
ย้ายเข้าสู่โฮมไดเร็กตอรี่ของเขา (การทำเช่นนี้จะทำให้เกิดข้อผิดพลาด):
cd ~
pg_upgrade
ต้องการอินพุตต่อไปนี้ ( pg_upgrade --help
บอกเรานี้):
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
อินพุตเหล่านี้อาจถูกระบุด้วย "long names" เพื่อให้ง่ายต่อการมองเห็น:
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
เราจะต้องผ่าน--new-options
สวิทช์เพราะความล้มเหลวที่จะทำดังต่อไปนี้:
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
สิ่งนี้เกิดขึ้นเนื่องจากมีการใช้ตัวเลือกการกำหนดค่าเริ่มต้นหากไม่มีสวิตช์นี้ซึ่งส่งผลให้มีการใช้ตัวเลือกการเชื่อมต่อที่ไม่ถูกต้องดังนั้นข้อผิดพลาดของซ็อกเก็ต
ดำเนินการpg_upgrade
คำสั่งจากเวอร์ชัน PostgreSQL ใหม่ :
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
ออกจากระบบบัญชีผู้ใช้เฉพาะ:
exit
การอัปเกรดเสร็จสมบูรณ์แล้วแต่อินสแตนซ์ใหม่จะผูกเข้ากับพอร์ต5433
(ค่าเริ่มต้นมาตรฐานคือ5432
) ดังนั้นโปรดระลึกไว้เสมอว่าหากพยายามทดสอบอินสแตนซ์ใหม่ก่อน "ตัดผ่าน"
เริ่มเซิร์ฟเวอร์ตามปกติ (อีกครั้งสิ่งนี้จะเริ่มต้นทั้งอินสแตนซ์เก่าและใหม่):
systemctl start postgresql
หากคุณต้องการให้รุ่นใหม่เป็นค่าเริ่มต้นคุณจะต้องแก้ไขไฟล์การกำหนดค่าที่มีประสิทธิภาพเช่น/etc/postgresql/9.6/main/postgresql.conf
และตรวจสอบให้แน่ใจว่าพอร์ตนั้นถูกกำหนดเช่น:
port = 5432
หากคุณทำเช่นนี้ให้เปลี่ยนหมายเลขพอร์ตของเวอร์ชันเก่าไป5433
พร้อมกัน (ก่อนที่จะเริ่มบริการ) หรือเพียงแค่ลบเวอร์ชันเก่า (ซึ่งจะไม่ลบเนื้อหาฐานข้อมูลจริงของคุณคุณจะต้องใช้apt --purge remove postgresql-9.5
เพื่อให้เกิดขึ้น ):
apt remove postgresql-9.5
คำสั่งด้านบนจะหยุดอินสแตนซ์ทั้งหมดดังนั้นคุณจะต้องเริ่มต้นอินสแตนซ์ใหม่เป็นครั้งสุดท้ายด้วย:
systemctl start postgresql
เป็นจุดสุดท้ายของการบันทึกอย่าลืมพิจารณาpg_upgrade
คำแนะนำที่ดี:
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
sudo su postgres
เปลี่ยนวิธีการทั้งหมดใน pg_hba.conf ทั้งการติดตั้งเพื่อความไว้วางใจก่อน pg_upgrade วิ่ง pg_upgrade ใน / tmp / ส่วนตัวไม่ได้ ~ ไม่ได้ทำงานเพื่อให้sudo mkdir /foobar
มีchmod 777 /foobar
และวิ่งไปที่นั่น ในที่สุดคำสั่ง pg_upgrade:/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
หากคุณใช้บริการ homebrew และ homebrew คุณก็สามารถทำได้:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
ฉันคิดว่านี่อาจไม่ทำงานอย่างสมบูรณ์หากคุณใช้คุณสมบัติ postgres ขั้นสูง แต่ใช้งานได้ดีสำหรับฉัน
คู่มือการใช้ครอบคลุมหัวข้อนี้ในเชิงลึก คุณสามารถ:
pg_upgrade
ในสถานที่; หรือ
pg_dump
pg_restore
และ
หากมีข้อสงสัยให้ทำด้วยการทิ้ง อย่าลบไดเรกทอรีข้อมูลเก่าเพียงเก็บไว้ในกรณีที่มีสิ่งผิดปกติ / คุณทำผิดพลาด ด้วยวิธีนี้คุณสามารถย้อนกลับไปสู่การติดตั้ง 9.3 ที่ไม่เปลี่ยนแปลง
ดูรายละเอียดได้จากคู่มือ
หากคุณติดขัดให้โพสต์คำถามโดยละเอียดเพื่ออธิบายว่าคุณติดอยู่ที่ไหนและทำอะไรก่อน ขึ้นอยู่กับว่าคุณติดตั้ง PostgreSQL ด้วยเช่นกันเนื่องจากมี "การกระจาย" ที่แตกต่างกันของ PostgreSQL สำหรับ OS X (น่าเสียดาย) ดังนั้นคุณจะต้องให้ข้อมูลนั้น
ยืนอยู่บนไหล่ของสิ่งมีชีวิตที่น่าสงสารอื่น ๆ ที่เหยียบย่ำผ่านโคลนตมนี้ฉันสามารถทำตามขั้นตอนเหล่านี้เพื่อกลับขึ้นและทำงานหลังจากอัพเกรดเป็นโยเซมิตี:
สมมติว่าคุณใช้ home-brew เพื่อติดตั้งและอัปเกรด Postgres คุณสามารถทำตามขั้นตอนต่อไปนี้
หยุดเซิร์ฟเวอร์ Postgres ปัจจุบัน:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
เริ่มต้นฐานข้อมูล 9.4 ใหม่:
initdb /usr/local/var/postgres9.4 -E utf8
ติดตั้ง postgres 9.3 (เนื่องจากไม่มีอยู่ในเครื่องของฉันอีกต่อไป):
brew install homebrew/versions/postgresql93
เพิ่มไดเรกทอรีที่ถูกลบระหว่างการอัพเกรดโยเซมิตี:
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
วิ่งpg_upgrade
:
pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/
ย้ายข้อมูลใหม่เข้าที่:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
เริ่ม Postgres ใหม่:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
ตรวจสอบ/usr/local/var/postgres/server.log
รายละเอียดและตรวจสอบว่าเซิร์ฟเวอร์ใหม่เริ่มต้นอย่างถูกต้อง
ในที่สุดติดตั้งไลบรารีที่เกี่ยวข้องอีกครั้ง
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
ก่อนที่จะย้ายข้อมูลและนั่นทำให้ postgres9.3 ถูกถอนการติดตั้ง สิ่งนี้ช่วยได้ :)
ดูเหมือนว่าโซลูชันได้รับการอบเข้าสู่ Homebrew แล้ว:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
มันทำเพื่อฉัน
https://gist.github.com/dideler/60c9ce184198666e5ab4
สั้นและตรงประเด็น ฉันไม่ได้ตั้งใจที่จะเข้าใจความกล้าของ PostgreSQL โดยสุจริตฉันต้องการทำสิ่งต่าง ๆ ให้สำเร็จ
jessie
Debian มี 10+ DBs และจำนวน ~ 400MB ของข้อมูลฐานข้อมูลที่ถูกแปลงในพริบตา จากนั้นอีกครั้งฉันใช้ Debian เสมือนบน SSD
pg_upgradecluster 9.4 main
แต่ฉันได้รับข้อผิดพลาด Error: specified cluster does not exist
... ฉันเดาว่าฉันต้องติดตั้ง postgresql-9.4 อีกครั้งก่อนด้วยคำแนะนำนี้: wiki.postgresql.org/wiki/Apt#Quickstart
บนWindows ที่pg_upgrade
ผมเก็บไว้หันหน้าไปทางข้อความข้อผิดพลาดที่แตกต่างกันเมื่อพยายามที่จะใช้
บันทึกเวลาให้ฉันได้มากเพียง:
ทางออกของฉันคือการรวมกันของสองทรัพยากรนี้:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
และ
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
สองหนึ่งช่วยมากขึ้นแล้วหนึ่งครั้งแรก อย่าทำตามขั้นตอนอย่างที่ไม่จำเป็น นอกจากนี้หากคุณไม่สามารถสำรองข้อมูลผ่านคอนโซล postgres คุณสามารถใช้วิธีอื่นและสำรองข้อมูลด้วย pgAdmin 3 หรือโปรแกรมอื่น ๆ เช่นที่ฉันทำในกรณีของฉัน
นอกจากนี้ลิงก์: https://help.ubuntu.com/stable/serverguide/postgresql.html ช่วยในการตั้งรหัสผ่านที่เข้ารหัสและตั้งค่า md5 สำหรับตรวจสอบสิทธิ์ผู้ใช้ postgres
หลังจากเสร็จสิ้นการตรวจสอบserver
รุ่นpostgres ที่รันใน terminal:
sudo -u postgres psql postgres
หลังจากป้อนรหัสผ่านที่รันในเทอร์มินัล postgres:
SHOW SERVER_VERSION;
มันจะออกผลลัพธ์ที่ชอบ:
server_version
----------------
9.4.5
สำหรับการตั้งค่าและการเริ่มต้น postgres ฉันได้ใช้คำสั่ง:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
จากนั้นสำหรับการกู้คืนฐานข้อมูลจากไฟล์:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
หรือถ้าไม่ลองกับอันนี้:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
และถ้าคุณกำลังใช้ Rails ให้ทำbundle exec rake db:migrate
หลังจากดึงรหัสแล้ว :)
สำหรับ Mac ผ่าน homebrew:
brew tap petere/postgresql
,
brew install <formula>
(เช่น: brew install petere/postgresql/postgresql-9.6
)
ลบ Postgres เก่า:
brew unlink postgresql
brew link -f postgresql-9.6
หากมีข้อผิดพลาดเกิดขึ้นอย่าลืมอ่านและปฏิบัติตามขั้นตอนการชงในแต่ละขั้นตอน
ลองดูสิ่งนี้เพิ่มเติมได้ที่: https://github.com/petere/homebrew-postgresql
บน Windows 10 ตั้งแต่ฉันมี npm ฉันได้ติดตั้งแพ็คเกจ rimraf npm install rimraf -g
สำรองฐานข้อมูลทั้งหมดของคุณทีละคำโดยใช้คำสั่ง pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
ติดตั้ง PostgreSQL เวอร์ชั่นล่าสุดแล้วเช่น 11.2 ซึ่งทำให้ฉันใช้พอร์ต 5433 ในเวลานี้
ตามมาด้วยการถอนการติดตั้งของรุ่นเก่าของเหมือง PostgreSQL เป็น 10. C:\PostgreSQL\10\data
หมายเหตุถอนการติดตั้งอาจจะให้คำเตือนไม่ลบโฟลเดอร์ นั่นเป็นเหตุผลที่เรามีขั้นตอนต่อไปโดยใช้ rimraf เพื่อลบโฟลเดอร์อย่างถาวรและเป็นโฟลเดอร์ย่อย
เปลี่ยนเป็น PostgreSQL rimraf 10
ไดเรกทอรีการติดตั้งและวิ่งคำสั่ง 10 คือชื่อไดเรกทอรี หมายเหตุใช้ PostgreSQL รุ่นเก่ากว่าของคุณเช่น 9.5 หรืออะไรบางอย่าง
ตอนนี้เพิ่มC:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
ลงในตัวแปรสภาพแวดล้อมของ Windows หมายเหตุรุ่นที่ติดตั้งใหม่ของฉันคือ 11 pg11
จึงเป็นเหตุผลที่ผมใช้
นำทางไปC:\PostgreSQL\data\pg11
แล้วเปิดpostgresql.conf
แก้ไขport = 5433
ไปport = 5432
แค่นั้นแหละ. เปิด cmd และประเภทpsql -U postgres
ตอนนี้คุณสามารถคืนค่าฐานข้อมูลที่สำรองไว้ทั้งหมดของคุณทีละฐานโดยใช้คำสั่ง pg_restore -U $username --dbname=$databasename $filename
โซลูชันของฉันสำหรับการอัพเกรดจาก Postgresql 11 เป็น Postgresql 12 บน Windows 10 มีดังต่อไปนี้
เป็นข้อสังเกตแรกคุณจะต้องสามารถหยุดและเริ่มบริการ Postgresql คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้ใน Powershell
ราคาเริ่มต้น:
pg_ctl start -D “d:\postgresql\11\data”
หยุด:
pg_ctl stop -D “d:\postgresql\11\data”
สถานะ:
pg_ctl status -D “d:\postgresql\11\data”
คุณควรสำรองข้อมูลก่อนทำการอัปเกรด อินสแตนซ์ Postgresql 11 ต้องทำงานอยู่ จากนั้นก็ให้ทำการลอกแบบกลม ๆ
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
จากนั้นสำหรับแต่ละฐานข้อมูล
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
หรือ
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
หากยังไม่ได้ติดตั้ง Postgresql 12 (เนื่องจาก Postgresql 11 ยังติดตั้งอยู่จะมีพอร์ต 5433)
จากนั้นให้ทำการอัพเกรดดังนี้:
1) หยุดบริการ Postgresql 11 (ดูด้านบน)
2) แก้ไขpostgresql.conf
ไฟล์ในd:\postgresql\12\data
และเปลี่ยนport = 5433
เป็นport = 5432
3) แก้ไขพา ธ สภาพแวดล้อมของผู้ใช้ windows ( windows start
จากนั้นพิมพ์env
) เพื่อชี้ไปที่ Postgresql 12 แทนที่จะเป็น Postresql 11
4) เรียกใช้การอัพเกรดโดยป้อนคำสั่งต่อไปนี้
pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres
(ใน PowerShell ใช้ backtick (หรือ backquote) `เพื่อดำเนินการต่อคำสั่งในบรรทัดถัดไป)
5) และในที่สุดก็เริ่มบริการ Postgresql 12 ใหม่
pg_ctl start -D “d:\postgresql\12\data”
ฉันคิดว่านี่เป็นลิงก์ที่ดีที่สุดสำหรับโซลูชันของคุณเพื่ออัปเดต postgres เป็น 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/