Sự cố nâng cấp Postgres với pg_upgrade
Tôi đang cố gắng nâng cấp 9.5.5 lên 12.3 bằng pg_uprade, gặp lỗi sau
Kích thước phân đoạn quan hệ pg_controldata cũ và mới không hợp lệ hoặc không khớp
9.5.5
Khối trên mỗi phân đoạn của mối quan hệ lớn: 8388608
12.3
Khối trên mỗi phân đoạn của mối quan hệ lớn: 131072
8388608 khối tương đương với 64 GB.
Tôi đã biên dịch lại phiên bản 12.3 bằng các tùy chọn sau
./configure --prefix = / opt / pgsql / PostgreSQL-12 --with-segsize = 64
đầu ra pg_controldata 9.5.5
pg_control version number: 942
Catalog version number: 201510051
Database system identifier: 6307574991682851055
Database cluster state: shut down
pg_control last modified: Thu 01 Oct 2020 07:15:50 PM EDT
Latest checkpoint location: 2FB/7C000028
Prior checkpoint location: 2FB/78000098
Latest checkpoint's REDO location: 2FB/7C000028
Latest checkpoint's REDO WAL file: 00000001000002FB0000001F
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0/130082037
Latest checkpoint's NextOID: 182620
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Latest checkpoint's oldestXID: 1741
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 0
Latest checkpoint's oldestMultiXid: 1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint: Thu 01 Oct 2020 07:15:50 PM EDT
Fake LSN counter for unlogged rels: 0/1
Minimum recovery ending location: 0/0
Min recovery ending loc's timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
wal_level setting: hot_standby
wal_log_hints setting: off
max_connections setting: 1000
max_worker_processes setting: 8
max_prepared_xacts setting: 0
max_locks_per_xact setting: 64
track_commit_timestamp setting: off
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 8388608
WAL block size: 8192
Bytes per WAL segment: 67108864
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Size of a large-object chunk: 2048
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by value
Data page checksum version: 0
đầu ra pg_controldata 12.3
pg_control version number: 942
Catalog version number: 201510051
Database system identifier: 6307574991682851055
Database cluster state: shut down
pg_control last modified: Thu 01 Oct 2020 07:15:50 PM EDT
Latest checkpoint location: 2FB/7C000028
Prior checkpoint location: 2FB/78000098
Latest checkpoint's REDO location: 2FB/7C000028
Latest checkpoint's REDO WAL file: 00000001000002FB0000001F
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0/130082037
Latest checkpoint's NextOID: 182620
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Latest checkpoint's oldestXID: 1741
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 0
Latest checkpoint's oldestMultiXid: 1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint: Thu 01 Oct 2020 07:15:50 PM EDT
Fake LSN counter for unlogged rels: 0/1
Minimum recovery ending location: 0/0
Min recovery ending loc's timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
wal_level setting: hot_standby
wal_log_hints setting: off
max_connections setting: 1000
max_worker_processes setting: 8
max_prepared_xacts setting: 0
max_locks_per_xact setting: 64
track_commit_timestamp setting: off
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 8388608
WAL block size: 8192
Bytes per WAL segment: 67108864
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Size of a large-object chunk: 2048
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by value
Data page checksum version: 0
Và chạy lại pg_upgrade thì gặp lỗi tương tự như trên. Tôi còn thiếu gì ở đây?
Trả lời
Dường như bạn đã đăng pg_controldatađầu ra cho PostgreSQL 9.5 hai lần.
Dù sao, bạn sẽ phải định cấu hình PostgreSQL v12 với kích thước phân đoạn bảng không chuẩn:
./configure --prefix=/opt/pgsql/PostgreSQL-12 --with-segsize=64
Ngoài ra, trong quá trình này initdb, bạn sẽ phải chỉ định kích thước phân đoạn WAL không chuẩn:
initdb ... --wal-segsize=64 /path/to/datadir
Sau đó pg_upgradesẽ thành công (nếu ngôn ngữ, v.v. khớp).
Vì vậy, sau nhiều thử nghiệm, tôi đã tìm ra vấn đề. Nếu tôi chạy cấu hình --with-segsize = 64 trên RHEL 6.10, kích thước phân đoạn sẽ không được đặt thành 64 GB, nhưng nếu tôi chạy trên RHEL 7.8 thì có. Có vẻ như một lỗi với RHEL 6.10.