Nama saya Alexander Kotsyuruba, saya mengelola pengembangan layanan internal di DomClick.ru.
Artikel ini dibagi menjadi beberapa bagian dengan judul. Setiap judul mengacu pada peningkatan PostgreSQL dari satu versi ke versi lainnya. Dalam setiap bab, kami telah menyoroti:
- Fitur
- Risiko yang ditimbulkan oleh potensi ketidaksesuaian
- Gangguan aplikasi
- Penurunan kinerja
- Siapa yang harus dicari saat memperbarui
- Administrator sistem
- Pengembang
- Komentar
Jadi, mari kita mulai.
Perbarui metode
pg_upgrade
Bukan cara paling andal untuk memperbarui PostreSQL. Misalnya, Anda mungkin mendapatkan kesalahan saat REINDEX dari versi PostgreSQL sebelumnya.logical replication
— , downtime . , logical replication 10. pglogical ( 2ndquadrant), 9.4 12. , PostgreSQL<10.0, .pg_dumpall
— . — downtime.pg_dumpall --globals-only
pg_dump --create
. , , , PostgreSQL.
PostgreSQL 9.5 -> 9.6
to_char() ( )
, to_char('-4 years'::interval, 'YY') -04 , -4 . |
- to_char() , . |
||
extract() ( )
extract() «», . infinity -infinity , (, year, epoch), NULL (, day, hour). . |
extract() c , . |
||
pg_stat_activity , ( , )
, . pg_stat_activity . . waiting wait_event_type wait_event . |
- . . | ||
, email host ( )
, , tsvector , . |
, , . PostgreSQL . pg_dump , . .. pg_upgrade . |
||
CREATEUSER/NOCREATEUSER CREATE ROLE ( )
CREATEUSER SUPERUSER . , ( ), CREATEROLE . , , . |
, 9.6. | ||
, pg_ , ( )
. , initdb . |
|||
psql -c --no-psqlrc ( , )
--no-psqlrc ( -X ). psql. |
psql. | ||
pg_restore -t, , ( ) | |||
NextXID pg_controldata ( , )
--ID- : . / LSN, . |
|||
, , ( )
, . , ( pg_upgrade ), ALTER EXTENSION UPDATE ( ). |
pg_upgrade extension. pg_upgrade |
MVCC ( )
, , . , , , .old_snapshot_threshold
, MVCC . . , , , , .
Memecahkan masalah "membengkak" database karena "membuka transaksi dan pergi berlibur"; pembaruan terburu-buru yang membutuhkan waktu berjam-jam; merindukan
select
tuan dan budak. Ini adalah salah satu dari dua opsi, berkat itu akan dimungkinkan untuk menyelesaikan masalah, karena itu mereka tidak dapat membebani permintaan lama dari master ke slave.
PostgreSQL 9.6 -> 10.0
Fitur | Risiko | Siapa yang harus diperhatikan | Komentar |
---|---|---|---|
Setelah memutakhirkan dari pg_upgrade versi utama PostgreSQL sebelumnya, indeks hash harus dibangun kembali (Mithun Sai, Robert Haas, Amit Kapila)
Persyaratan ini disebabkan oleh peningkatan yang signifikan dalam mekanisme indeks hash. Untuk memudahkan tugas pengindeksan ulang, itu pg_upgrade akan membuat skrip pembantu. |
Gangguan aplikasi | Administrator sistem | Argumen lain menentang pg_upgrade |
pg_xlog pg_wal , pg_clog pg_xact ( )
— , , , . . |
|||
SQL, «xlog» «wal» ( )
, pg_switch_xlog() pg_switch_wal() , pg_receivexlog — pg_receivewal , --xlogdir — --waldir . pg_xlog ; «xlog» . |
|||
WAL location lsn ( )
. |
|||
pg_basebackup WAL, ( )
pg_basebackup -X/--wal-method stream . none . pg_basebackup -x ( -X fetch ). |
|||
pg_hba.conf ( )
replication . , , all . - replication . , . |
|||
pg_ctl ( )
pg_ctl -w . |
|||
log_directory pg_log log ( ) |
|||
ssl_dh_params_file OpenSSL DH ( )
dh1024.pem. , dh1024.pem ; , DH. |
|||
DH, DH- OpenSSL, 2048 ( )
DH 1024 2048 , DH . SSL, Java Runtime Environment 6, DH 1024 , , SSL. , DH 1024 . |
|||
( )
password_encryption off plain . UNENCRYPTED CREATE/ALTER USER ... PASSWORD . --unencrypted createuser . , , . password_encryption md5 . |
|||
min_parallel_table_scan_size min_parallel_index_scan_size ( , )
min_parallel_relation_size , . |
«» . | ||
shared_preload_libraries ( )
, SQL- . |
|||
sql_inheritance ( )
, , . SQL , , PostgreSQL 7.1. |
|||
/ ( )
configure --disable-integer-datetimes . , PostgreSQL 8.3. |
: rpm, deb, etc. | ||
- 1.0 ( )
PostgreSQL 6.3. |
|||
contrib/tsearch2 ( )
, PostgreSQL 8.3. |
|||
createlang droplang ( )
PostgreSQL 9.1. CREATE EXTENSION DROP EXTENSION . |
|||
, , SELECT ( )
, , SELECT , , LATERAL FROM . , . , NULL . , , , . , , , CASE COALESCE . |
set-returning function (.. , ) FROM . , - SELECT . - , . . |
||
UPDATE ... SET (_) = _ ( )
_ ROW ; . _ , _ ROW , , . _.* _ , _ . |
Ini adalah aturan yang biasa untuk row_constructor . Tidaklah biasa untuk menggunakannya dengan UPDATE cara ini. Dalam praktiknya, saya belum melihat kasus seperti itu, meskipun sintaks seperti itu muncul dalam dokumentasi di PostgreSQL 8.2. Di versi 10, tampaknya sintaks ini dibawa ke standar yang digunakan di versi lain dari PostgreSQL. Tidak peduli betapa aneh kelihatannya, adalah mungkin untuk memasukkan potongan kode seperti itu. |
Fitur menarik
Publikasikan / Berlangganan Replikasi Logis
Sebuah fitur berguna yang dapat digunakan untuk meningkatkan dengan waktu henti yang minimal.
Partisi tabel deklaratif
Sintaks deklaratif baru menyederhanakan partisi tabel.
Meningkatkan Paralelisasi Kueri
Awalnya 9.6 memperkenalkan dukungan untuk eksekusi paralel kueri besar. Tapi itu hanya menyangkut pemindaian, penggabungan, dan agregasi.
Di 10.0, pada gilirannya, kemungkinan eksekusi paralel muncul:
- Pemindaian indeks B-Tree
- Pemindaian bitmap
- Gabungkan bergabung
- Subkueri tidak berkorelasi
Perlindungan kata sandi yang lebih kuat menggunakan SCRAM-SHA-256
Mungkin tidak kompatibel dengan beberapa pustaka koneksi PostgreSQL non-standar (non-libpq).
PostgreSQL 10.0 -> 11.0
Fitur | Risiko | Siapa yang harus diperhatikan | Komentar |
---|---|---|---|
Penanganan ekspresi yang benar dengan jalur relatif masuk xmltable() , xpath() dan fungsi lain yang bekerja dengan XML (Markus Winand)
Menurut standar SQL, jalur relatif harus dipertimbangkan dari simpul dokumen XML, dan bukan dari simpul akar, seperti fungsi yang biasa dilakukan. |
SQL. , XML. , . | ||
pg_dump , ( )
, GRANT/REVOKE ALTER DATABASE SET , pg_dumpall . pg_dump --create pg_restore --create . pg_dumpall -g , . pg_dumpall ( -g ) .
pg_dump pg_restore --create / ; .
pg_dumpall , , , . CREATE DATABASE , .
pg_dumpall --clean postgres template1, , . |
. , .. . . , pg_dump/pg_restore --create . , , . |
||
( , )
, . |
|||
adminpack pg_file_read() , pg_file_length() pg_logfile_rotate() ( )
. adminpack , ALTER EXTENSION ... UPDATE . |
|||
replacement_sort_tuples ( )
, . |
text ^@ text
SP-GiST ( )
LIKE '%'
btree, .
Pencarian berdasarkan awalan cukup umum. Untuk ini, kami menambahkan operator khusus dengan dukungan untuk indeks khusus. Dan yang paling menarik, dokumentasi resmi tidak menyebutkan sepatah kata pun tentang operator ini. Sebaliknya, sebuah fungsi disebutkan
starts_with
- fungsi internal yang menjadi dasar operator ini, tetapi penggunaannya tidak memberikan percepatan menggunakan indeks.
Mengurangi ekspresi=
menjadi ekspresiIS NOT NULL
yang setara (Tom Lane)
Ini meningkatkan skor selektivitas.
Anehnya, kami telah menemukan desain seperti itu dalam praktiknya. Ternyata, kasus seperti itu tidak jarang terjadi.
PostgreSQL 11.0 -> 12.0
btree ( , )
/ , , . .
,pg_upgrade
.
Argumen lain tidak mendukung
pg_upgrade
.
Kesimpulan
Daftar periksa ini adalah ekstrak kami dari sumber resmi PostgreSQL. Dalam praktiknya, bergantung pada pendekatan pengembangan, kekritisan kompatibilitas tertentu untuk Anda mungkin berbeda. Saya akan senang jika artikel ini akan menyelamatkan seseorang dari kehilangan data atau mengurangi biaya tenaga kerja untuk memperbarui PostgreSQL.
PS
Berkat Oleg Samoilov (splarv) untuk membantu menyiapkan artikel.