Blog Postgresql 11’den 12 Sürümüne Nasıl Upgrade İşlemi Yapılır?

Postgresql 11’den 12 Sürümüne Nasıl Upgrade İşlemi Yapılır?

Öncelikle Postgresql 12 sürümününün kurulumunun yapılması gerekmektedir. Adımlar aşağıdaki şekildedir:

yum install postgresql12

yum install postgresql12-server

/usr/pgsql-12/bin/postgresql-12-setup initdb

Kurulumu tamamladıktan sonra upgrade'e uygunluk check'i çalıştırılır (Postgresql kullanıcısı ile yapılır. buna ek olarak 11 ve 12 sürümlü veri tabanları kapalı olması gerekmektedir).

/usr/pgsql-12/bin/pg_upgrade   --old-datadir=/var/lib/pgsql/11/data   --new-datadir=/var/lib/pgsql/12/data   --old-bindir=/usr/pgsql-11/bin   --new-bindir=/usr/pgsql-12/bin   --check

Aşağıdaki gibi bir çıktı vermelidir:

Performing Consistency Checks

-----------------------------

Checking cluster versions                                   ok

Checking database user is the install user                  ok

Checking database connection settings                       ok

Checking for prepared transactions                          ok

Checking for reg* data types in user tables                 ok

Checking for contrib/isn with bigint-passing mismatch       ok

Checking for tables WITH OIDS                               ok

Checking for invalid "sql_identifier" user columns          ok

Checking for presence of required libraries                 ok

Checking database user is the install user                  ok

Checking for prepared transactions                          ok

*Clusters are compatible*

Sonrasında --check komutunu kaldırılarak çalıştırılmalıdır böylelikle upgrade işlemi başlamış olur.

usr/pgsql-12/bin/pg_upgrade   --old-datadir=/var/lib/pgsql/11/data   --new-datadir=/var/lib/pgsql/12/data   --old-bindir=/usr/pgsql-11/bin   --new-bindir=/usr/pgsql-12/bin

Aşağıdaki şekilde bir çıktı alınmalıdır:

Performing Consistency Checks

-----------------------------

Checking cluster versions                                   ok

Checking database user is the install user                  ok

Checking database connection settings                       ok

Checking for prepared transactions                          ok

Checking for reg* data types in user tables                 ok

Checking for contrib/isn with bigint-passing mismatch       ok

Checking for tables WITH OIDS                               ok

Checking for invalid "sql_identifier" user columns          ok

Creating dump of global objects                             ok

Creating dump of database schemas

                                                            ok

Checking for presence of required libraries                 ok

Checking database user is the install user                  ok

Checking for prepared transactions                          ok

If pg_upgrade fails after this point, you must re-initdb the

new cluster before continuing.

Performing Upgrade

------------------

Analyzing all rows in the new cluster                       ok

Freezing all rows in the new cluster                        ok

Deleting files from new pg_xact                             ok

Copying old pg_xact to new server                           ok

Setting next transaction ID and epoch for new cluster       ok

Deleting files from new pg_multixact/offsets                ok

Copying old pg_multixact/offsets to new server              ok

Deleting files from new pg_multixact/members                ok

Copying old pg_multixact/members to new server              ok

Setting next multixact ID and offset for new cluster        ok

Resetting WAL archives                                      ok

Setting frozenxid and minmxid counters in new cluster       ok

Restoring global objects in the new cluster                 ok

Restoring database schemas in the new cluster

                                                            ok

Copying user relation files

                                                            ok

Setting next OID for new cluster                            ok

Sync data directory to disk                                 ok

Creating script to analyze new cluster                      ok

Creating script to delete old cluster                       ok

 

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

Upgrade sonrasında istemiş olduğu  ./analyze_new_cluster.sh ve ./delete_old_cluster.sh dosyalarının çalıştırılması istenmektedir.

-bash-4.2$ ./analyze_new_cluster.sh

This script will generate minimal optimizer statistics rapidly

so your system is usable, and then gather statistics twice more

with increasing accuracy.  When it is done, your system will

have the default level of optimizer statistics.

If you have used ALTER TABLE to modify the statistics target for

any tables, you might want to remove them and restore them after

running this script because they will delay fast statistics generation.

If you would like default statistics as quickly as possible, cancel

this script and run:

    "/usr/pgsql-12/bin/vacuumdb" --all --analyze-only

vacuumdb: error: could not connect to database template1: could not connect to server: No such file or directory

                Is the server running locally and accepting

                connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Done

-bash-4.2$ ./delete_old_cluster.sh

Upgrade işlemi tamamlandı. Artık yeni veri tabanını açıp servisi enable edip, eski veri tabanından gelen verilerinizi kontrol edebilirsiniz.

systemctl enable postgresql-12

systemctl start postgresql-12

Veri tabanı Versiyonu check edilir;

-bash-4.2$ psql -c "SELECT version();"

                                                 version                                                 

---------------------------------------------------------------------------------------------------------

 PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit

(1 row)

Veri tabanına bağlantı kurulur.

-bash-4.2$ psql

psql (12.1)

Type "help" for help.

Aşağıda görüleceği üzere eng isimli veri tabanı yeni veri tabanına sorunsuz bir şekilde aktarıldı.

postgres=# l+

                                                                    List of databases

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description    

-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------

-------------

 eng       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 138 MB  | pg_default | 

 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8209 kB | pg_default | default administrative connect

ion database

 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 8065 kB | pg_default | unmodifiable empty database

           |          |          |             |             | postgres=CTc/postgres |         |            | 

 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | postgres=CTc/postgres+| 8065 kB | pg_default | default template for new datab

ases

           |          |          |             |             | =c/postgres           |         |            | 

(4 rows)

Herhangi bir tablo kontrol edelim;

eng=# select * from den limit 4

eng-# ;

 schemaname |    tablename     | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity 

------------+------------------+------------+------------+------------+----------+-------------+-------------

 pg_catalog | pg_statistic     | postgres   |            | t          | f        | f           | f

 pg_catalog | pg_foreign_table | postgres   |            | t          | f        | f           | f

 pg_catalog | pg_authid        | postgres   | pg_global  | t          | f        | f           | f

 pg_catalog | pg_user_mapping  | postgres   |            | t          | f        | f           | f

(4 rows)

eng=# select count(*) from den;

 count  

--------

 565248

(1 row)

 

Yazar: Engin Yılmaz