برنامه نویسی

PostgreSQL در OpenBSD: ارتقاء از 14 به 15 – با استفاده از pg_upgrade

معرفی

OpenBSD اسناد عالی را به عنوان بخشی از پروژه فراهم می کند. (برای مثال صفحات Man با دقت نگهداری می شوند.) این نه تنها در مورد سیستم عامل، بلکه در مورد بسته های خدمات اصلی نیز صدق می کند. همین امر برای PostgreSQL نیز صادق است.

اکنون pkg-readme PostgreSQL (/usr/local/share/doc/pkg-readmes/postgresql-server) می گوید که دو راه برای ارتقا پایگاه داده وجود دارد:

  1. pg_dumpall
  2. pg_upgrade

اولی نسبتا کند است و برای پایگاه داده های بزرگ نامناسب است. اما نیازی به اضافه کردن بسته های اضافی ندارید. دومی برعکس است.

من در گذشته مقاله ای در مورد قبلی نوشتم. بنابراین من PostgreSQL را از 12 به 13 ارتقا دادم. این بار نوبت دومی است.

محیط

  • سیستم عامل: OpenBSD 7.3 (<- 7.2)
  • DB: PostgreSQL 15 (<- 14)

آموزش

این در قالب راهنمای گام به گام نوشته شده است. بیا شروع کنیم.

پشتیبان گیری (در صورت نیاز)

اگر به پشتیبان گیری اهمیت می دهید pg_dumpall را می توان با:

$ pg_dumpall > pg.sqldump 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا فقط تعداد پایگاه های داده است Password: شما خواهید پرسید.

pg_upgrade نصب

دریافت شده از سیستم بسته Ports:

$ doas pkg_add postgresql-pg_upgrade
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتایج این بود:

quirks-6.42 signed on 2023-04-06T19:16:59Z
postgresql-pg_upgrade-14.5:postgresql-previous-13.5p0: ok
postgresql-pg_upgrade-14.5: ok
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

OBSD 7.2 -> 7.3 و ارتقاء بسته PG

این بخش مربوط به ارتقای OpenBSD است نه PostgreSQL.

sysupgrade / sysmerge / pkg_add -u به این ترتیب اجرا می شوند.
در این مقاله بیشتر در مورد آن نوشتم.

اکنون، در طی مراحل بالا، سوالات زیر در مورد PostgreSQL از شما پرسیده می شود:

postgresql-server-15.2p0: Updating across a major version - data migration needed, see the pkg-readme.
Do you want to update now ? [y/N/a] y
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ارتقاء بسته های PostgreSQL (نه خود پایگاه داده) “y” را وارد کنید. چیزی شبیه به:

postgresql-client+postgresql-contrib+postgresql-pg_upgrade+postgresql-server-14.5->postgresql-client-15.2+postgresql-contrib-15.2+postgresql-pg_upgrade-15.2+postgresql-server-15.2p0: ok
(...)
New and changed readme(s):
    /usr/local/share/doc/pkg-readmes/postgresql-server
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دیمون رو متوقف کن

بیایید سرور را متوقف کنیم و آماده کنیم:

$ doas rcctl stop postgresql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتایج این بود:

postgresql(ok)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آماده. پایگاه داده خود را ارتقا دهید!!

یک خوشه PostgreSQL 15 ایجاد کنید

اولین data بیایید یک دایرکتوری ایجاد کنیم.
حرکت جریان:

$ doas mv /var/postgresql/data /var/postgresql/data-14
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و mkdir ایجاد یک مورد جدید بابیشتر PostgreSQL initdb اجرا کن:

$ # doas su _postgresql -c "mkdir /var/postgresql/data && cd /var/postgresql && \
        initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 -W"
$ doas su _postgresql -c "mkdir /var/postgresql/data && cd /var/postgresql && \
      initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 --locale=ja_JP.UTF-8 -W"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از موارد فوق، اولی از محتویات pkg-readme می آید. مورد دوم در مورد من اعمال شد،--locale=(...) گزینه های اضافه شده

نتایج این بود:

The files belonging to this database system will be owned by user "_postgresql".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

Enter new superuser password: 
Enter it again: 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رمز عبور superuser PostgreSQL را دو بار وارد کنید. به این صورت ادامه می دهد:

fixing permissions on existing directory /var/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Tokyo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

    pg_ctl -D /var/postgresql/data -l logfile start

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

انجام داد. پایگاه داده مقداردهی اولیه شده و فایل های مختلفی ایجاد شده است.

تنظیمات مهاجرت

مراحل این بخش برای انتقال داده ها موقت است.

نسخه فعلی (و نسخه بعدی) pg_hba.conf ویرایش:

$ doas nvim /var/postgresql/data-14/pg_hba.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اجازه دادن به اتصالات محلی از ابرکاربران:

  # TYPE  DATABASE        USER            ADDRESS                 METHOD
+ local all postgres trust
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک کلمه احتیاط این خط باید ابتدا قرار گیرد. این برای دادن بالاترین اولویت است.

بعد از آن pg_hba.conf 15 یعنی آخرین نسخه از فایل های زیر شامل data کپی در دایرکتوری:

$ doas cp -p /var/postgresql/data-14/pg_hba.conf /var/postgresql/data/

$ # in addition, in case that tls is used:
$ doas cp -p /var/postgresql/data-14/server.{crt,key} /var/postgresql/data/
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

pg_upgrade اجرای

خوب. دیتابیس اکنون در انتظار ارتقاء است!!! دستور زیر را اجرا کنید (به لطف این نرم افزار و pkg-readme):

$ doas su _postgresql -c "cd /var/postgresql && \
      pg_upgrade -b /usr/local/bin/postgresql-14/ -B /usr/local/bin \
      -U postgres -d /var/postgresql/data-14/ -D /var/postgresql/data"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وقتی آن را اجرا کردم، نتیجه این بود:

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 system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       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
Checking for new cluster tablespace directories             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 oldest XID for new cluster                          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 delete old cluster                       ok
Checking for extension updates                              ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/local/bin/vacuumdb -U postgres --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

موفقیت 🙂

تنظیمات را بازیابی کنید

بیایید با حذف خطی که به طور موقت اضافه کردیم، پیکربندی را بازیابی کنیم:

$ doas nvim /var/postgresql/data/pg_hba.conf

$ # in addition, if you care about restoring the previous one:
$ doas nvim /var/postgresql/data/pg_hba.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

موارد زیر را انجام دهید:

  # TYPE  DATABASE        USER            ADDRESS                 METHOD
- local all postgres trust
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی برای PostgreSQL 15 (در صورت نیاز)

postgresql.conf اگر تنظیمات منحصر به فرد دیگری دارید، آنها را اعمال کنید:

$ # create the backup (optional):
$ doas cp -p /var/postgresql/data/postgresql.conf /var/postgresql/data/postgresql.conf.org

$ doas nvim /var/postgresql/data/postgresql.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به نظر می رسد (فقط یک مثال):

  (...)
+ listen_addresses="*"
  (...)
+ ssl = on
  (...)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که postgresql.conf برای فایل کانفیگ اصلی /usr/local/share/postgresql/postgresql.conf.sample هست در

تمام عملیات ارتقا به پایان رسیده است.

دیمون را شروع کنید

بیایید سرور پایگاه داده را راه اندازی کنیم:

$ doas rcctl start postgresql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

امیدوارم به خیر بگذره 🙂

حذف بسته (اختیاری)

همچنین می‌توانید با بسته‌هایی که اضافه کرده‌اید خداحافظی کنید و از کارشان تشکر کنید:

$ doas pkg_delete postgresql-pg_upgrade
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتایج این بود:

postgresql-pg_upgrade-15.2: ok
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نتیجه

از طریق مراحل بالا، می توانید OpenBSD را از 7.2 به 7.3 ارتقا دهید و PostgreSQL را از 14 به 15 ارتقا دهید.

راستی data-14 فهرست ممکن است در نهایت “قدیمی” شود.

باشد که با اجرای آخرین PostgreSQL در آخرین OpenBSD بهترین لحظات را داشته باشید 🌟

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا