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

معرفی
OpenBSD اسناد عالی را به عنوان بخشی از پروژه فراهم می کند. (برای مثال صفحات Man با دقت نگهداری می شوند.) این نه تنها در مورد سیستم عامل، بلکه در مورد بسته های خدمات اصلی نیز صدق می کند. همین امر برای PostgreSQL نیز صادق است.
اکنون pkg-readme PostgreSQL (/usr/local/share/doc/pkg-readmes/postgresql-server
) می گوید که دو راه برای ارتقا پایگاه داده وجود دارد:
pg_dumpall
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 بهترین لحظات را داشته باشید 🌟