Уровень 3.0
Предусловия:
- Изучена лекция 9 «Обновление Pangolin»
Все действия в этой лабораторной работе выполняйте на виртуальной машине Host1.
Обновление с переносом данных
-
Подключитесь к виртуальной машине через
webssh, указав IP-адрес Host1. -
В терминале запустите оболочку от имени пользователя
postgres:[student@ServerName ~]$ sudo -iu postgres -
Создайте каталог для табличного пространства:
[postgres@ServerName ~]$ mkdir ~/tablespace_dir -
Подключитесь в
psqlк базе данныхpostgresот имени пользователяpostgres:[postgres@ServerName ~]$ psqlpsql (13.8)Type "help" for help. -
Проверьте номер версии Pangolin и соответствующий номер версии оригинального PostgreSQL:
postgres=# SELECT name, setting FROM pg_settings WHERE name IN ('server_se_version', 'server_version');name | setting-------------------+---------------------------server_se_version | Platform V Pangolin \{pangolin_version\}server_version | 13.8(2 rows)Подключение выполнено к серверу Pangolin {pangolin_version}, которая соответствует 13.8 оригинальной версии PostgreSQL.
-
Проверьте, с какой локалью инициализирован кластер баз данных:
postgres=# \l template0List of databasesName | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgres(1 row)Вспомним, что для переноса данных с использованием утилиты
pg_upgradeтребуется совпадение локалей, а также старого и нового кластеров баз данных.Локаль кластера проверяется на основе шаблонной базы данных
template0, поскольку только она гарантировано сохраняется в неизменном «чистом» виде после инициализации кластера. В других базах данных, включаяtemplate1, локаль может быть использована другая.В этом случае в качестве провайдера локали используется библиотека
libc, кодировка локали —UTF8, в качестве правил сортировки (Collate) и классификации символов (Ctype) -en_US.UTF-8. -
Создайте роль
student:postgres=# CREATE ROLE student WITH LOGIN CREATEDB PASSWORD 'student';CREATE ROLEВспомним, что роли относятся к глобальным объектам — они не принадлежат ни одной из баз данных. Это верно также для табличных пространств.
-
Создайте табличное пространство с владельцем
student:postgres=# CREATE TABLESPACE some_tablespace OWNER student LOCATION '/home/postgres/tablespace_dir';CREATE TABLESPACEСозданное табличное пространство размещено в каталоге
/home/postgres/tablespace_dir. -
Создайте базу данных
pgbench_dbс владельцемstudent:postgres=# CREATE DATABASE pgbench_db WITH OWNER student TABLESPACE some_tablespace;CREATE DATABASEПри создании базы данных в качестве табличного пространства по умолчанию было выбрано только что созданное
some_tablespace. -
Выйдите из сеанса
psql:
postgres=# \q
- Наполните базу данных
pgbench_db1с использованием тестаpgbench:
[postgres@ServerName ~]$ pgbench -i -d pgbench_db
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.02 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.16 s (drop tables 0.00 s, create tables 0.00 s, client-side generate 0.07 s, vacuum 0.05 s, primary keys 0.04 s).
[postgres@ServerName ~]$ pgbench -t 100000 -d pgbench_db 2> /dev/null
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 1
number of threads: 1
number of transactions per client: 100000
number of transactions actually processed: 100000/100000
latency average = 0.939 ms
tps = 1064.789486 (including connections establishing)
tps = 1064.829438 (excluding connections establishing)
Сначала pgbench был проинициализирован (pgbench -i) в созданной базе данных pgbench_db.
Затем с помощью теста с использованием 100000 транзакций (-t 100000) база данных наполнена данными.
- Подключитесь в
psqlк базе данныхpgbench_db, проверьте размер и количество строк в созданных в ней таблицах:
[postgres@ServerName ~]$ psql -d pgbench_db
psql (13.8)
Type "help" for help.
pgbench_db=# SELECT relname,
reltuples,
pg_size_pretty(pg_total_relation_size(relname::regclass)) total_table_size,
relhasindex
FROM pg_class
WHERE relname IN ('pgbench_accounts', 'pgbench_branches', 'pgbench_history', 'pgbench_tellers');
relname | reltuples | total_table_size | relhasindex
------------------+-----------+------------------+-------------
pgbench_accounts | 100000 | 15 MB | t
pgbench_branches | 1 | 56 kB | t
pgbench_tellers | 10 | 56 kB | t
pgbench_history | 100000 | 5128 kB | f
(4 rows)
Как видно из результата выполнения запроса, утилита pgbench создала четыре таблицы, две из которых содержат по 100000 строк. При этом у трех таблиц есть индекс.
- Выйдите из сеанса
psql:
pgbench_db=# \q
- Остановите экземпляр Pangolin:
[postgres@ServerName ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
Установка пакетов новой мажорной версии Pangolin
-
Выйдите из оболочки, запущенной от имени пользователя
postgres:[postgres@ServerName ~]$ exitlogout -
Проверьте наличие дистрибутива Pangolin в каталоге
Distribдомашнего каталога пользователяstudent:[student@ServerName ~]$ ls -1 ~/DistribPSQ-\{pangolin_version\}-4-\{OS\}.10-distrib.zipPSQ-\{major-minor\}.0-176767-\{OS\}-distrib.zipБудут установлены пакеты сервера и клиента Pangolin версии {major-minor}.0 с использованием дистрибутива
PSQ-\{major-minor\}.0-176767-\{OS\}-distrib.zip.Поскольку обновление происходит на новую мажорную версию (5 -> 6), после установки пакетов нужно выполнить перенос данных в новый кластер баз данных.
-
Создайте каталог и перейдите в него для распаковки архива:
[student@ServerName ~]$ mkdir ~/Distr && cd ~/Distr -
Распакуйте монолитный архив с дистрибутивом:
[student@ServerName Distr]$ unzip ~/Distrib/PSQ-\{major-minor\}.0-176767-\{OS\}-distrib.zipArchive: /home/student/Distrib/PSQ-\{major-minor\}.0-176767-\{OS\}-distrib.zipinflating: PSQ-\{major-minor\}.0-176767-\{OS\}-cyclonedx-distrib.jsoninflating: PSQ-\{major-minor\}.0-176767-\{OS\}-installer-distrib.pominflating: PSQ-\{major-minor\}.0-176767-\{OS\}-installer-distrib.zipinflating: PSQ-\{major-minor\}.0-176767-\{OS\}-owned-distrib.pominflating: PSQ-\{major-minor\}.0-176767-\{OS\}-owned-distrib.zipinflating: PSQ-\{major-minor\}.0-176767-\{OS\}-party-distrib.pominflating: PSQ-\{major-minor\}.0-176767-\{OS\}-party-distrib.zipinflating: PSQ-\{major-minor\}.0-176767-\{OS\}-swidtag-distrib.swidtaginflating: PSQ-\{major-minor\}.0-176767-\{OS\}-unpacker-distrib.shinflating: PSQ-doc-\{major-minor\}.0-17-distrib.zipinflating: PSQ-doc-\{major-minor\}.0-17.pom -
Выполните скрипт распаковки:
[student@ServerNamedcdp8b Distr]$ bash PSQ-\{major-minor\}.0-176767-\{OS\}-unpacker-distrib.shstart~/Distr/distributive ~/Distrsuccessful completion: PSQ-06.006.00-distrib.tar.gz~/DistrВ результате выполнения скрипта установочное программное обеспечение перепаковывается в сжатый архив
tar.gzс RPM-пакетами. -
Распакуйте архив
PSQ-06.005.01-distrib.tar.gzи посмотрите список полученных rpm-пакетов:[student@ServerName Distr]$ tar xf PSQ-06.006.00-distrib.tar.gz[student@ServerName Distr]$ ls -1 *.rpmpangolin-backup-tools-1.2.5-\{OS\}.x86_64.rpmpangolin-copywala-v1.1.0-hotfix-\{OS\}.x86_64.rpmpangolin-core-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-dbms-\{major-minor\}-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-dbms-\{major-minor\}-libpq-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-dbms-\{major-minor\}-libpq-dev-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-full-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-manager-2.1.8-\{OS\}.x86_64.rpmpangolin-manager-dcs-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-orchestrated-\{major-minor\}.0-\{OS\}.x86_64.rpmpangolin-pooler-1.5.2-\{OS\}.x86_64.rpmСервер Pangolin содержится в пакете
pangolin-dbms-\{major-minor\}-\{major-minor\}.0-\{OS\}.x86_64.rpm.Клиент Pangolin содержится в пакете
pangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64.rpm. -
Выполните установку сервера Pangolin:
[student@ServerName Distr]$ sudo dnf -y install pangolin-dbms-\{major-minor\}-\{major-minor\}.0-\{OS\}.x86_64.rpm...Installed:pangolin-dbms-\{major-minor\}-\{major-minor\}.0-\{OS\}.x86_64 python39-3.9.20-2.module+sl8.10+1373+039144e8.x86_64python39-libs-3.9.20-2.module+sl8.10+1373+039144e8.x86_64 python39-pip-20.2.4-9.module+sl8.10+997+aa9ed508.noarchpython39-pip-wheel-20.2.4-9.module+sl8.10+997+aa9ed508.noarch python39-setuptools-50.3.2-7.module+sl8.10+1373+039144e8.noarchpython39-setuptools-wheel-50.3.2-7.module+sl8.10+1373+039144e8.noarchComplete! -
Выполните установку клиента Pangolin:
[student@ServerName Distr]$ sudo dnf -y install pangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64.rpm...Verifying : pangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64 1/1Installed products updated.Installed:pangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64Complete! -
Проверьте, что пакеты успешно установлены:
[student@ServerName Distr]$ sudo rpm -qa pangolin\*...pangolin-dbms-\{major-minor\}-\{major-minor\}.0-\{OS\}.x86_64pangolin-dbms-\{major-minor\}-client-\{major-minor\}.0-\{OS\}.x86_64
Инициализация кластера и перенос конфигурации
-
Запустите оболочку от имени пользователя
postgres:[student@ServerName Distr]$ sudo -iu postgres -
Создайте необходимые каталоги:
[postgres@ServerName ~]$ mkdir -p /pgdata/\{major-minor\}.0/data /pgdata/pgerrorlogs/\{major-minor\}.0Помимо каталога с данным и каталога с журналом ошибок, необходимым является каталог с лицензией.
В этом случае для старой и новой версии будет использоваться общий каталог с лицензией, поэтому его создавать не нужно.
-
Актуализируйте содержание файла
.bash_profile:[postgres@ServerName ~]$ cp .bash_profile .bash_profile.orig[postgres@ServerName ~]$ cat << 'EOF' > .bash_profile# Pangolinexport LD_LIBRARY_PATH=/usr/pangolin-major.minor/libexport PATH=$PATH:/usr/pangolin-major.minor/binexport PGHOME=/usr/pangolin-\{major-minor\}export PGDATABASE=postgresexport PGUSER=postgresexport PGHOST=127.0.0.1export PGPORT=5432export PGCLIENTENCODING=UTF8export CLNAME=clusternameexport PGSSLCERT=/pg_ssl/client.crtexport PGSSLKEY=/pg_ssl/client.keyexport PGSSLROOTCERT=/pg_ssl/root.crtNOW=$(date +"%Y-%m-%d")export PGDATA=/pgdata/\{major-minor\}.0/dataexport MANPATH=$MANPATH:$PGHOME/share/manEOF[postgres@ServerName ~]$ source .bash_profileПеременные среды при обновлении версии следует также обновить, поскольку они используются различными утилитами работы с Pangolin.
-
Инициализируйте кластер баз данных:
[postgres@ServerName ~]$ initdb -D /pgdata/\{major-minor\}.0/data...Data page checksums are disabled.fixing permissions on existing directory /pgdata/\{major-minor\}.0/data ... okcreating subdirectories ... okselecting dynamic shared memory implementation ... posixselecting default max_connections ..."/usr/pangolin-major.minor/bin/postgres" --check -F -c log_checkpoints=false -c is_initdb=true -c max_connections=100 -c shared_buffers=1000 -c dynamic_shared_memory_type=posix < "/dev/null" > "/dev/null" 2>&1100selecting default shared_buffers ... 128MBselecting default time zone ... UTCcreating configuration files ... okrunning bootstrap script ... WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not existsLOCATION: check_enable_params_cache, security.c:101okperforming post-bootstrap initialization ... WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not existsLOCATION: check_enable_params_cache, security.c:101oksyncing data to disk ... okinitdb: warning: enabling "trust" authentication for local connectionsinitdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using:pg_ctl -D /pgdata/\{major-minor\}.0/data -l logfile startКластер инициализирован в новом каталоге
/pgdata/\{major-minor\}.0/data -
Посмотрите содержимое проинициализированного каталога с данными:
[postgres@ServerName ~]$ ls /pgdata/\{major-minor\}.0/database pg_hba.conf pg_multixact pg_prep_stats pg_snapshots pg_tblspc pg_xact postmaster.pidglobal pg_ident.conf pg_notify pg_quota.conf pg_stat pg_twophase postgresql.auto.conf PRODUCT_VERSIONpg_commit_ts pg_integrity pg_perf_insights pg_replslot pg_stat_tmp PG_VERSION postgresql.conf tracingpg_dynshmem pg_logical pg_pp_cache pg_serial pg_subtrans pg_wal postmaster.optsКак обычно, каталог с данными помимо файлов данных в базовом табличном пространстве, также содержит ряд подкаталогов и конфигурационных файлов, необходимых для функционирования экземпляра.
Однако, не забывайте, что мы также создали еще одно табличное пространство, размещенное в отдельном каталоге.
-
Сравните значения параметра
enabled_extra_auth_methodsв старом и новом кластере:[postgres@ServerName ~]$ cat /pgdata/\{pangolin_version\}/data/postgresql.conf | grep enabled_extra_auth_methodsenabled_extra_auth_methods = 'peer, trust, scram-sha-256'[postgres@ServerName ~]$ cat /pgdata/\{major-minor\}.0/data/postgresql.conf | grep enabled_extra_auth_methodsenabled_extra_auth_methods = ''При обновлении с переносом данных также требуется выполнить перенос конфигурационных параметров со старого кластера на новый.
В нашем случае нужно привести в соответствие значение параметра
enabled_extra_auth_methods. Иначе подключение от имени ролиpostgresбудет невозможно. -
Измените значение параметра
enabled_extra_auth_methodsв новом кластере:[postgres@ServerName ~]$ sed -i '/^enabled_extra_auth_methods/ c\enabled_extra_auth_methods = '\''peer, trust, scram-sha-256'\''' /pgdata/\{major-minor\}.0/data/postgresql.conf[postgres@ServerName ~]$ cat /pgdata/\{major-minor\}.0/data/postgresql.conf | grep enabled_extra_auth_methodsenabled_extra_auth_methods = 'peer, trust, scram-sha-256' -
Запустите экземпляр Pangolin и подключитесь в
psqlк базе данныхpostgresс рольюpostgres:[postgres@ServerName ~]$ pg_ctl start -l logfilewaiting for server to start.... doneserver started[postgres@ServerName ~]$ psqlpsql (15.5)Type "help" for help.Был запущен кластер Pangolin новой версии, хотя каталог данных явно не был указан.
Вспомним, что мы обновили значения переменных среды пользователя
postgresв.bash_profile. -
Проверьте номер версии Pangolin и соответствующий номер версии оригинального PostgreSQL:
postgres=# SELECT name, setting FROM pg_settings WHERE name IN ('server_se_version', 'server_version');name | setting-------------------+------------------------------server_se_version | Platform V Pangolin DB \{major-minor\}.0server_version | 15.5(2 rows)Подключение выполнено к экземпляру Pangolin версии {major-minor}.0, которому соответствует версия 15.5 оригинального PostgreSQL.
-
Проверьте, с какой локалью инициализирован кластер баз данных:
postgres=# \l template0
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(1 row)
Новый кластер по умолчанию был инициализирован с той же локалью, что и старый.
- Выйдите из
psql:
postgres=# \q
Перенос данных с использованием pg_upgrade
-
Проверьте версию утилиты
pg_upgradeиpg_dump:[postgres@ServerName ~]$ pg_upgrade --versionpg_upgrade (PostgreSQL) 15.5[postgres@ServerName ~]$ pg_dump --versionpg_dump (PostgreSQL) 15.5Для переноса данных нужно, чтобы версии утилит
pg_upgradeиpg_dumpсоответствовали новой версии Pangolin.Вспомним, что
pg_upgradeлогически переносит только данные системного каталога. Для этого он использует утилиту логического резервного копированияpg_dump. Файлы пользовательских таблиц и индексов логически не переносятся. Они либо копируются на новый кластер «как есть», либо на них создаются жесткие ссылки в нем (для этого вpg_upgradeиспользуется ключ--link). -
Остановите экземпляр Pangolin:
[postgres@ServerName ~]$ pg_ctl stopwaiting for server to shut down.... doneserver stoppedДля работы утилиты
pg_upgradeоба экземпляра должны быть остановлены. -
Проверьте возможность выполнения переноса данных с использованием утилиты
pg_upgrade:[postgres@ServerName ~]$ pg_upgrade --check \-b /usr/pangolin-\{pangolin_version\}/bin \-B /usr/pangolin-major.minor/bin \--new-bindirclient /usr/pangolin-dbms-client-major.minor/bin \-d /pgdata/\{pangolin_version\}/data \-D /pgdata/\{major-minor\}.0/dataPerforming Consistency Checks-----------------------------Checking cluster versions okChecking old cluster type PangolinChecking database user is the install user okChecking database connection settings okChecking for prepared transactions okChecking for system-defined composite types in user tables okChecking for reg* data types in user tables okChecking for arrays of predefined domains in user tables okChecking for contrib/isn with bigint-passing mismatch okChecking for user-defined encoding conversions okChecking for user-defined postfix operators okChecking for incompatible polymorphic functions okChecking for incompatible "xid" data type okChecking for spgist indexes okChecking for gin indexes okChecking for external indexes okChecking for presence of required libraries okChecking database user is the install user okChecking for prepared transactions okChecking for new cluster tablespace directories ok*Clusters are compatible*okОпция
--checkпозволяет провести ряд проверок для определения возможности переноса данных между кластерами баз данных.Остальные опции определяют различные каталоги для старой и новой версии Pangolin, а именно:
-b— каталог с исполняемыми файлами серверной части старой версии Pangolin-B— каталог с исполняемыми файлами серверной части новой версии Pangolin--new-bindirclient— каталог с исполняемыми файлами клиентской части новой версии Pangolin, в нем в том числе находитсяpg_dump-d— каталог с конфигурационными файлами старой версии Pangolin-D— каталог с конфигурационными файлами новой версии Pangolin
Здесь все проверки успешно пройдены. Может быть выполнен перенос данных из старого кластера в новый.
-
Выполните перенос данных с использованием
pg_upgrade:[postgres@ServerName ~]$ pg_upgrade \-b /usr/pangolin-\{pangolin_version\}/bin \-B /usr/pangolin-major.minor/bin \--new-bindirclient /usr/pangolin-dbms-client-major.minor/bin \-d /pgdata/\{pangolin_version\}/data \-D /pgdata/\{major-minor\}.0/dataRestoring global objects in the new cluster okRestoring database schemas in the new clusterokSetting minmxid counter in new cluster okMerging TDE settings okCopying user relation filesokSetting next OID for new cluster okSync data directory to disk okCreating script to delete old cluster okChecking for spgist indexes okChecking for gin indexes okChecking for external indexes okChecking for extension updates okUpgrade Complete----------------Optimizer statistics are not transferred by pg_upgrade.Once you start the new server, consider running:/usr/pangolin-dbms-client-major.minor/bin/vacuumdb --all --analyze-in-stagesRunning this script will delete the old cluster's data files:./delete_old_cluster.shokДля переноса данных в
pg_upgradeиспользованы те же ключи, что и для проверки возможности переноса, за исключением ключа--check.Перенос данных успешно выполнен.
Проверим это.
-
Запустите экземпляр Pangolin:
[postgres@ServerName ~]$ pg_ctl start -l logfilewaiting for server to start.... doneserver started -
Подключитесь к базе данных
pgbench_dbс рольюpostgresи получите информацию об имеющихся таблицах:[postgres@ServerName ~]$ psql -d pgbench_dbpsql (15.5)Type "help" for help.pgbench_db=# SELECT relname,reltuples,pg_size_pretty(pg_total_relation_size(relname::regclass)) total_table_size,relhasindexFROM pg_classWHERE relname IN ('pgbench_accounts', 'pgbench_branches', 'pgbench_history', 'pgbench_tellers');relname | reltuples | total_table_size | relhasindex------------------+-----------+------------------+-------------pgbench_accounts | -1 | 15 MB | tpgbench_branches | -1 | 56 kB | tpgbench_history | -1 | 5128 kB | fpgbench_tellers | -1 | 56 kB | t(4 rows)Все таблицы и индексы успешно перенесены. Размеры таблиц совпадают, поскольку перенос выполнен путем их физического копирования.
Однако, количество строк не определено (
reltuples = -1).Дело в том, что поле
reltupleв таблицеpg_classзаполняется при обновлении статистики по данным.В нашем случае статистика по данным еще не успела собраться. Это произойдет через некоторое время — при срабатывании процесса автоочистки.
Пока статистика не собрана, оптимизатор построить адекватные планы выполнения запросов, что негативно сказывается на производительности системы.
Поэтому после выполнения переноса рекомендуется выполнить сбор статистики явно, с использованием команды
ANALYZE. -
Выполните сбор статистики и снова получите информацию об имеющихся таблицах:
pgbench_db=# ANALYZE;ANALYZEpgbench_db=# SELECT relname,reltuples,pg_size_pretty(pg_total_relation_size(relname::regclass)) total_table_size,relhasindexFROM pg_classWHERE relname IN ('pgbench_accounts', 'pgbench_branches', 'pgbench_history', 'pgbench_tellers');relname | reltuples | total_table_size | relhasindex------------------+-----------+------------------+-------------pgbench_accounts | 100000 | 15 MB | tpgbench_branches | 1 | 56 kB | tpgbench_history | 100000 | 5128 kB | fpgbench_tellers | 10 | 56 kB | t(4 rows)Статистика собрана, теперь в поле
reltuplesуказано количество строк в таблицах. -
Проверьте наличие созданной роли и табличного пространства:
pgbench_db=# \duList of rolesRole name | Attributes | Member of-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}student | Create DB | {}pgbench_db=# \dbList of tablespacesName | Owner | Location-----------------+----------+-------------------------------pg_default | postgres |pg_global | postgres |some_tablespace | student | /home/postgres/tablespace_dir(3 rows)Глобальные объекты кластера (роли и табличные пространства) также успешно перенесены.
-
Выйдите из
psqlи проверьте содержимое каталогаtablespace_dir:pgbench_db=# \q[postgres@ServerName ~]$ ls tablespace_dir/PG_13_202306131 PG_15_202506231psqlВ каталоге табличного пространства создан новый подкаталог (
PG_15_202506231psql), соответствующий новой версии Pangolin.В него скопированы файлы данных из каталога табличного пространства старого кластера Pangolin (
PG_13_202306131).Обновление мажорной версии Pangolin с переносом данных успешно выполнено!
Утилита
pg_upgradeсгенерировала скрипт, удаляющий файлы старого кластера. -
Посмотрите содержимое скрипта
delete_old_cluster.shи выполните его:
[postgres@ServerName ~]$ cat delete_old_cluster.sh
#!/bin/sh
rm -rf '/pgdata/\{pangolin_version\}/data'
rm -rf '/home/postgres/tablespace_dir/PG_13_202306131'
[postgres@ServerName ~]$ bash delete_old_cluster.sh
Завершение
-
Подключитесь в
psqlк базе данныхpostgresс рольюpostgres:[postgres@ServerName ~]$ psqlpsql (15.5)Type "help" for help. -
Удалите базу данных
pgbench_db:postgres=# DROP DATABASE pgbench_db;DROP DATABASE -
Удалите табличное пространство
some_tablespace:postgres=# DROP TABLESPACE some_tablespace;DROP TABLESPACE -
Удалите роль
studentи выйдите изpsql:postgres=# DROP ROLE student;DROP ROLEpostgres=# \q -
Удалите каталог табличного пространства:
[postgres@ServerName ~]$ rm -rf ~/tablespace_dir/ -
Выйдите из оболочки, запущенной от имени пользователя
postgres:[postgres@ServerName ~]$ exitlogout -
Перейдите в домашний каталог пользователя
studentи удалите каталогDistr:[student@ServerName Distr]$ cd ~ && rm -rf Distr
Самопроверка
Вопрос 1
Какие действия выполняет утилита pg_upgrade без указания ключей --check и --link? Выберите все правильные варианты:
Вопрос 2
Какие условия нужно соблюсти для переноса данных с использованием утилиты pg_upgrade? Выберите все правильные варианты:
Вопрос 3
Перенос данных при обновлении кластера выполняется с использованием следующей команды:
[postgres@pangolin-prac-dcdp8b ~]$ pg_upgrade --link \
-b /usr/pangolin-5.5.6/bin \
-B /usr/pangolin-6.6/bin \
--new-bindirclient /usr/pangolin-dbms-client-6.6/bin \
-d /pgdata/5.5.6/data \
-D /pgdata/6.6.0/data
В обновляемом кластере баз данных пользовательские табличные пространства отсутствуют.
Какие каталоги будут физически содержать файлы с данными после выполнения переноса с использованием указанной команды?