Tôi đang sử dụng cơ sở dữ liệu PostgreSQL cho ứng dụng Ruby on Rails của tôi (trên Mac OS X 10.9).
Có hướng dẫn chi tiết nào về cách nâng cấp cơ sở dữ liệu PostgreSQL không?
Tôi sợ rằng tôi sẽ phá hủy dữ liệu trong cơ sở dữ liệu hoặc làm hỏng nó.
Tôi đang sử dụng cơ sở dữ liệu PostgreSQL cho ứng dụng Ruby on Rails của tôi (trên Mac OS X 10.9).
Có hướng dẫn chi tiết nào về cách nâng cấp cơ sở dữ liệu PostgreSQL không?
Tôi sợ rằng tôi sẽ phá hủy dữ liệu trong cơ sở dữ liệu hoặc làm hỏng nó.
Câu trả lời:
Giả sử bạn đã sử dụng pha chế tại nhà để cài đặt và nâng cấp Postgres, bạn có thể thực hiện các bước sau.
Dừng máy chủ Postgres hiện tại:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Khởi tạo cơ sở dữ liệu 10.1 mới:
initdb /usr/local/var/postgres10.1 -E utf8
chạy pg_upgrade
(lưu ý: thay đổi phiên bản bin nếu bạn đang nâng cấp từ thứ gì đó khác bên dưới) :
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
để kích hoạt đăng nhập nội bộ dài dòng
-d
thư mục cấu hình cụm cơ sở dữ liệu cũ
-D
thư mục cấu hình cụm cơ sở dữ liệu mới
-b
thư mục thực thi PostgreSQL cũ
-B
thư mục thực thi PostgreSQL mới
Di chuyển dữ liệu mới vào vị trí:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Khởi động lại Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Kiểm tra /usr/local/var/postgres/server.log
chi tiết và đảm bảo máy chủ mới khởi động đúng cách.
Cuối cùng, cài đặt lại pg
đá quý rails
gem uninstall pg
gem install pg
Tôi khuyên bạn nên dành chút thời gian để đọc tài liệu PostgreSQL để hiểu chính xác những gì bạn đang làm trong các bước trên để giảm thiểu sự thất vọng.
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
lệnh. Lần đầu tiên tôi đã xóa các thư mục /usr/local/postgres9.3 theo cách thủ công, hơn là chạy lệnh này và dường như tôi đã mất toàn bộ thư mục / usr / local / var / postgres (tôi có thể khôi phục nó từ Time Machine)
gem uninstall pg
nhưng sau đó hãy để bundler cài đặt lại phiên bản chính xác từ Gemfile.lock bằng cách chạy đơn giản bundle
.
brew
bây giờ cũng có tùy chọn để sử dụng brew services stop postgresql
và brew services start postgresql
thay vì gọi trực tiếp launchctl unload
và launchctl load
.
Mặc dù tất cả các câu trả lời ở trên, đây là 5 xu của tôi.
Nó hoạt động trên mọi hệ điều hành và từ bất kỳ phiên bản postgres nào.
postgresql.conf
-> port
từ 5432
thành 5433
;cd
vào bin
thư mục phiên bản mới ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
hoặc pg_hba.conf
), bạn sẽ cần sao chép thủ công những thay đổi đó trong cài đặt mới. Thay vào đó, nếu bạn sử dụng pg_upgradecluster
, các tệp cấu hình sẽ được sao chép vào cụm mới: manpages.ubfox.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.
Đây là giải pháp cho người dùng Ubuntu
Đầu tiên chúng ta phải dừng postgresql
sudo /etc/init.d/postgresql stop
Tạo một tệp mới có tên /etc/apt/source.list.d/pgdg.list và thêm dòng dưới đây
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Thực hiện theo các lệnh dưới đây
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
Bây giờ chúng ta có mọi thứ, chỉ cần nâng cấp nó như dưới đây
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Đó là nó. Hầu hết các cụm được nâng cấp sẽ chạy trên số cổng 5433. Kiểm tra nó bằng lệnh bên dưới
sudo pg_lsclusters
Cập nhật : Quá trình này tương tự để nâng cấp 9,5 đến ít nhất 11,5; chỉ cần sửa đổi các lệnh để phản ánh các phiên bản 9.6
và 10
, đâu 9.6
là phiên bản cũ và 10
là phiên bản mới . Hãy chắc chắn điều chỉnh các thư mục "cũ" và "mới" tương ứng.
Tôi vừa nâng cấp PostgreQuery 9.5 lên 9.6 trên Ubuntu và nghĩ rằng tôi sẽ chia sẻ những phát hiện của mình, vì có một số sắc thái dành riêng cho hệ điều hành / gói cần phải biết.
( Tôi không muốn phải kết xuất và khôi phục dữ liệu theo cách thủ công , vì vậy một số câu trả lời khác ở đây không khả thi.)
Nói tóm lại, quá trình này bao gồm cài đặt phiên bản mới của PostgreSQL cùng với phiên bản cũ (ví dụ: 9.5 và 9.6), sau đó chạy pg_upgrade
nhị phân, được giải thích chi tiết (một số) tại https://www.postgresql.org/ docs / 9.6 / static / pgupTHER.html .
Khía cạnh "khó khăn" duy nhất của pg_upgrade
việc không vượt qua giá trị chính xác cho một đối số hoặc không đăng nhập như người dùng chính xác hoặc cd
đến đúng vị trí trước khi thực hiện lệnh, có thể dẫn đến các thông báo lỗi khó hiểu.
Trên Ubuntu (và có lẽ là Debian), miễn là bạn đang sử dụng repo "chính thức", deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
và với điều kiện bạn chưa thay đổi đường dẫn hệ thống tệp mặc định hoặc tùy chọn thời gian chạy, quy trình sau sẽ thực hiện công việc.
Cài đặt phiên bản mới (lưu ý rằng chúng tôi chỉ định 9.6
rõ ràng):
sudo apt install postgresql-9.6
Sau khi cài đặt thành công, cả hai phiên bản sẽ chạy song song, nhưng trên các cổng khác nhau. Đầu ra cài đặt đề cập đến điều này, ở phía dưới, nhưng thật dễ dàng bỏ qua:
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
Dừng cả hai trường hợp máy chủ (điều này sẽ dừng cả hai cùng một lúc):
sudo systemctl stop postgresql
Chuyển sang người dùng hệ thống PostgreSQL chuyên dụng:
su postgres
Di chuyển vào thư mục nhà của anh ấy (không làm điều này sẽ gây ra lỗi):
cd ~
pg_upgrade
yêu cầu các đầu vào sau ( pg_upgrade --help
cho chúng tôi biết điều này):
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)
Những đầu vào này có thể được chỉ định bằng "tên dài", để dễ hình dung hơn:
-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
Chúng tôi cũng phải vượt qua --new-options
chuyển đổi, vì không thực hiện được kết quả như sau:
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"?
Điều này xảy ra bởi vì các tùy chọn cấu hình mặc định được áp dụng trong trường hợp không có công tắc này, dẫn đến các tùy chọn kết nối không chính xác được sử dụng, do đó xảy ra lỗi ổ cắm.
Thực hiện pg_upgrade
lệnh từ mới phiên bản 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
Thoát khỏi tài khoản người dùng hệ thống chuyên dụng:
exit
Việc nâng cấp đã hoàn tất, nhưng , phiên bản mới sẽ liên kết với cổng 5433
(mặc định là tiêu chuẩn 5432
), vì vậy hãy ghi nhớ điều này nếu cố gắng kiểm tra phiên bản mới trước khi "cắt" nó.
Khởi động máy chủ như bình thường (một lần nữa, điều này sẽ bắt đầu cả phiên bản cũ và mới):
systemctl start postgresql
Nếu bạn muốn biến phiên bản mới thành mặc định, bạn sẽ cần chỉnh sửa tệp cấu hình hiệu quả, ví dụ: /etc/postgresql/9.6/main/postgresql.conf
và đảm bảo rằng cổng được xác định như sau:
port = 5432
Nếu bạn làm điều này, hãy thay đổi số cổng của phiên bản cũ 5433
thành cùng một lúc (trước khi bắt đầu dịch vụ) hoặc chỉ cần xóa phiên bản cũ (điều này sẽ không xóa nội dung cơ sở dữ liệu thực tế của bạn; bạn sẽ cần sử dụng apt --purge remove postgresql-9.5
để điều đó xảy ra. ):
apt remove postgresql-9.5
Lệnh trên sẽ dừng tất cả các phiên bản, vì vậy bạn sẽ cần bắt đầu phiên bản mới lần cuối cùng với:
systemctl start postgresql
Là một điểm lưu ý cuối cùng, đừng quên xem xét pg_upgrade
lời khuyên tốt:
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
, thay đổi tất cả PHƯƠNG trong pg_hba.conf cả của cài đặt để niềm tin trước khi pg_upgrade, chạy pg_upgrade trong / / tmp tin không ~ đã không làm việc để sudo mkdir /foobar
có chmod 777 /foobar
và chạy nó ở đó. Cuối cùng, lệnh pg_upTHER:/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
Nếu bạn đang sử dụng dịch vụ homebrew và homebrew, bạn có thể chỉ cần làm:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Tôi nghĩ rằng điều này có thể không hoạt động hoàn toàn nếu bạn đang sử dụng các tính năng postgres nâng cao, nhưng nó hoạt động hoàn hảo với tôi.
Các hướng dẫn sử dụng bao gồm chủ đề này trong chiều sâu. Bạn có thể:
pg_upgrade
tại chỗ; hoặc là
pg_dump
và pg_restore
.
Nếu nghi ngờ, hãy làm điều đó với bãi rác. Đừng xóa thư mục dữ liệu cũ, chỉ giữ nó trong trường hợp có lỗi xảy ra / bạn mắc lỗi; bằng cách đó bạn có thể quay lại cài đặt 9.3 không thay đổi của mình.
Để biết chi tiết, xem hướng dẫn.
Nếu bạn bị mắc kẹt, hãy đăng câu hỏi chi tiết giải thích cách bạn bị mắc kẹt, ở đâu và những gì bạn đã thử trước tiên. Nó cũng phụ thuộc một chút vào cách bạn cài đặt PostgreSQL, vì có một số "bản phân phối" khác nhau của PostgreQuery cho OS X (không may). Vì vậy, bạn cần cung cấp thông tin đó.
Đứng trên vai của những sinh vật đáng thương khác đang giẫm đạp qua cái muck này, tôi đã có thể làm theo các bước sau để trở lại và chạy sau khi nâng cấp lên Yosemite:
Giả sử bạn đã sử dụng pha chế tại nhà để cài đặt và nâng cấp Postgres, bạn có thể thực hiện các bước sau.
Dừng máy chủ Postgres hiện tại:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Khởi tạo cơ sở dữ liệu 9,4 mới:
initdb /usr/local/var/postgres9.4 -E utf8
Cài đặt postgres 9.3 (vì nó không còn xuất hiện trên máy của tôi):
brew install homebrew/versions/postgresql93
Thêm thư mục bị xóa trong quá trình nâng cấp Yosemite:
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
chạy 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/
Di chuyển dữ liệu mới vào vị trí:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Khởi động lại Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Kiểm tra /usr/local/var/postgres/server.log
chi tiết và đảm bảo máy chủ mới khởi động đúng cách.
Cuối cùng, cài đặt lại thư viện liên quan?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
trước khi di chuyển dữ liệu và điều đó khiến postgres9.3 bị gỡ cài đặt. Điều này đã giúp. :)
Có vẻ như giải pháp đã được đưa vào Homebrew ngay bây giờ:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Điều này đã làm điều đó cho tôi.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Ngắn và đến điểm. Tôi thực sự không nhằm mục đích hiểu được sự can đảm của PostgreSQL, tôi muốn hoàn thành công việc.
jessie
. Có hơn 10 DB và một lượng ~ 400 MB dữ liệu cơ sở dữ liệu đã được chuyển đổi trong nháy mắt. Một lần nữa, tôi đang sử dụng Debian ảo trên SSD.
pg_upgradecluster 9.4 main
nhưng tôi gặp lỗi Lỗi: specified cluster does not exist
... Tôi đoán, trước tiên tôi phải cài đặt postgresql-9.4 với hướng dẫn này: wiki.postgresql.org/wiki/Apt#Quickstart
Trên Windows tôi liên tục phải đối mặt với các thông báo lỗi khác nhau khi cố gắng sử dụng pg_upgrade
.
Tiết kiệm rất nhiều thời gian cho tôi chỉ:
Giải pháp của tôi là kết hợp cả hai tài nguyên này:
https://gist.github.com/tamidel/2ea1fcdf99c819b4e07d
và
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Các thứ hai một giúp hơn sau đó là người đầu tiên. Ngoài ra, không, không làm theo các bước như một số không cần thiết. Ngoài ra, nếu bạn không thể sao lưu dữ liệu qua bảng điều khiển postgres, bạn có thể sử dụng phương pháp thay thế và sao lưu dữ liệu bằng pgAdmin 3 hoặc một số chương trình khác, như tôi đã làm trong trường hợp của mình.
Ngoài ra, liên kết: https://help.ubfox.com/urdy/serverguide/postgresql.html Đã giúp đặt mật khẩu được mã hóa và đặt md5 để xác thực người dùng postgres.
Sau khi hoàn tất, để kiểm tra server
phiên bản postgres chạy trong terminal:
sudo -u postgres psql postgres
Sau khi nhập mật khẩu, chạy trong thiết bị đầu cuối postgres:
SHOW SERVER_VERSION;
Nó sẽ xuất ra một cái gì đó như:
server_version
----------------
9.4.5
Để thiết lập và bắt đầu postgres tôi đã sử dụng lệnh:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
Và sau đó để khôi phục cơ sở dữ liệu từ một tệp:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
Hoặc nếu không hoạt động, hãy thử với cái này:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
Và nếu bạn đang sử dụng Rails, hãy thực hiện bundle exec rake db:migrate
sau khi kéo mã :)
Dành cho Mac thông qua homebrew:
brew tap petere/postgresql
,
brew install <formula>
(ví dụ brew install petere/postgresql/postgresql-9.6
:)
Xóa Postgres cũ:
brew unlink postgresql
brew link -f postgresql-9.6
Nếu có lỗi xảy ra, đừng quên đọc và làm theo hướng dẫn pha trong từng bước.
Kiểm tra này để biết thêm: https://github.com/petere/homebrew-postgresql
Trên Windows 10 kể từ khi tôi có npm, tôi đã cài đặt gói rimraf. npm install rimraf -g
Sao lưu tất cả các cơ sở dữ liệu của bạn từng cái một bằng cách sử dụng lệnh pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Sau đó đã cài đặt Phiên bản PostgreQuery mới nhất tức là 11.2, điều đó nhắc tôi sử dụng cổng 5433 lần này.
Tiếp theo là Gỡ cài đặt các phiên bản cũ hơn của tôi PostgreSQL là 10. Lưu ý trình gỡ cài đặt có thể đưa ra cảnh báo không xóa thư mục C:\PostgreSQL\10\data
. Đó là lý do tại sao chúng ta có bước tiếp theo sử dụng rimraf để xóa vĩnh viễn thư mục và đó là các thư mục con.
thay đổi vào thư mục cài đặt PostgreSQL và chạy lệnh rimraf 10
. 10 là một tên thư mục. Lưu ý sử dụng phiên bản cũ hơn của PostgreSQL tức là 9.5 hoặc một cái gì đó.
Bây giờ thêm C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
vào các biến môi trường Windows. Lưu ý phiên bản cài đặt mới của tôi là 11 vì vậy tại sao tôi đang sử dụng pg11
.
Điều hướng để C:\PostgreSQL\data\pg11
sau đó mở postgresql.conf
chỉnh sửaport = 5433
đểport = 5432
Đó là nó. Mở cmd và gõpsql -U postgres
Bây giờ bạn có thể khôi phục tất cả các cơ sở dữ liệu được hỗ trợ của mình từng cái một bằng cách sử dụng lệnh pg_restore -U $username --dbname=$databasename $filename
Giải pháp của tôi để nâng cấp từ Postgresql 11 lên Postgresql 12 trên Windows 10 là như sau.
Như một nhận xét đầu tiên, bạn sẽ cần có khả năng dừng và bắt đầu dịch vụ Postgresql. Bạn có thể làm điều này bằng các lệnh sau trong Powershell.
Khởi đầu:
pg_ctl start -D “d:\postgresql\11\data”
Dừng lại:
pg_ctl stop -D “d:\postgresql\11\data”
Trạng thái:
pg_ctl status -D “d:\postgresql\11\data”
Sẽ là khôn ngoan để tạo một bản sao lưu trước khi thực hiện nâng cấp. Ví dụ Postgresql 11 phải được chạy. Sau đó để sao chép toàn cầu
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
và sau đó cho mỗi cơ sở dữ liệu
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
hoặc là
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Nếu chưa cài đặt xong Postgresql 12 (vì Postgresql 11 cũng được cài đặt, nó sẽ có trên cổng 5433)
Sau đó, để thực hiện nâng cấp như sau:
1) Dừng dịch vụ Postgresql 11 (xem bên trên)
2) Chỉnh sửa postgresql.conf
tập tin trong d:\postgresql\12\data
và thay đổi port = 5433
thànhport = 5432
3) Chỉnh sửa đường dẫn môi trường người dùng windows ( windows start
sau đó nhậpenv
) để trỏ đến Postgresql 12 thay vì Postresql 11
4) Chạy nâng cấp bằng cách nhập lệnh sau.
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
(Trong powershell, sử dụng backtick (hoặc backquote) `để tiếp tục lệnh trên dòng tiếp theo)
5) và cuối cùng bắt đầu dịch vụ Postgresql 12 mới
pg_ctl start -D “d:\postgresql\12\data”
Tôi nghĩ rằng đây là liên kết tốt nhất cho giải pháp của bạn để cập nhật postgres lên 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/