Podniky a podniky používající staré verze PostgreSQL (PG) čelí problémům při upgradu na alespoň nejnovější stabilní verzi z PostgreSQL 12 nebo PostgreSQL 13. Existuje mnoho důvodů, proč je upgrade na nejnovější verzi musí. Jedním z hlavních důvodů je využití důležitých vylepšení vestavěných funkcí, aktualizací zabezpečení, zlepšení výkonu a nových implementací, které jsou užitečné pro správu databází.
Upgrade PostgreSQL přináší několik problémů, protože není tak snadný ve srovnání s jinými mainstreamovými databázemi. Pokud čelíte tomuto typu problému, nezoufejte. PostgreSQL vás nezamyká na konkrétní verzi, kterou chcete použít. V tomto blogu si projdeme příklad této výzvy a zároveň budeme mít nainstalované TimescaleDB a PostGIS na stávajícím hostiteli PostgreSQL 11.
Proč pg_upgrade?
pg_upgrade existuje již velmi dlouho jako nástroj pro aktualizaci hlavních verzí PostgreSQL. Použití tohoto nástroje není vyžadováno pro upgrady menších verzí, což znamená, že aktualizace vaší aktuální verze 11.9 na 11.13 není nutná.
Při upgradu vašeho PostgreSQL na hlavní verzi pomocí pg_upgrade nástroj funguje tak, že umožňuje upgradovat data uložená v datových souborech PostgreSQL na pozdější hlavní verzi PostgreSQL. Funguje to bez nutnosti výpisu/znovu načítání dat, což může nějakou dobu trvat, pokud máte velkou datovou sadu.
A teď přichází povyk. Je známo, že PostgreSQL, zejména pro vydání hlavních verzí, obsahuje nové funkce, které často mění rozložení systémových tabulek, ale formát interního úložiště dat se mění jen zřídka. pg_upgrade využívá této skutečnosti k provádění rychlých upgradů vytvořením nových systémových tabulek a jednoduchým opětovným použitím starých uživatelských datových souborů. Pokud budoucí hlavní vydání někdy změní formát ukládání dat tak, že starý formát dat bude nečitelný, pg_upgrade nebude pro takové aktualizace použitelné. (Komunita se pokusí takovým situacím vyhnout.)
Někteří mohou považovat pg_upgrade za nebezpečný, zejména pro produkční prostředí. No, tento nástroj byl široce používán jinde, od QA přes vývoj až po produkční prostředí. Má svá omezení nebo upozornění, jako je známý Unicode nebo znakové sady uložené ve vaší datové sadě. V takovém případě můžete zvážit použití pg_dump/pg_restore, ale dokončení může nějakou dobu trvat v závislosti na tom, jak velká jsou vaše data. U novějších verzí PostgreSQL, jako je PG 14.0, můžete provést pouze výpis/obnovu (nebo export/import) nebo logickou replikaci, jinak použijte pg_upgrade.
U větších datových sad použití pg_upgrade vyžaduje, abyste to spustili na stejném hostiteli, což ve výchozím nastavení použije kopii všech vašich fyzických souborů z vašeho datového adresáře. V takovém případě pg_upgrade podporuje volbu -k nebo --link, což znamená, že místo kopírování souborů do nového clusteru použije pevné odkazy.
pg_upgrade dělá, co je v jeho silách, aby se ujistil, že staré a nové clustery jsou binárně kompatibilní, např. tím, že zkontroluje kompatibilní nastavení kompilace, včetně 32/64bitových binárních souborů. Je také důležité, aby všechny externí moduly byly binárně kompatibilní, i když to nelze zkontrolovat pomocí pg_upgrade.
pg_upgrade podporuje upgrady z 8.4.X a novější na aktuální hlavní vydání PostgreSQL, včetně snapshotů a beta verzí.
Tady je situace…
V tomto nastavení jsem použil ClusterControl k nasazení databázového clusteru PostgreSQL 11 pro jeden uzel. Na Centos 7 a Ubuntu Focal (20.04.1) bylo testováno následující:
$ /usr/pgsql-11/bin/postgres --version
postgres (PostgreSQL) 11.13
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
------------------------+---------+------------+-------------------------------------------------------------------
fuzzystrmatch | 1.1 | public | determine similarities and distance between strings
pg_stat_statements | 1.6 | public | track execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 3.1.4 | public | PostGIS geometry and geography spatial types and functions
postgis_raster | 3.1.4 | public | PostGIS raster types and functions
postgis_sfcgal | 3.1.4 | public | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.1.4 | tiger | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.1.4 | topology | PostGIS topology spatial types and functions
timescaledb | 2.3.1 | public | Enables scalable inserts and complex queries for time-series data
(9 rows)
Takže mám následující,
Verze serveru PostgreSQL: 11.13
Verze TimescaleDB: 2.3.1
Verze PostGIS: 3.1.4
Pokud to chcete otestovat pomocí ClusterControl, existují dva způsoby, jak mít TimescaleDB. Můžete nasadit cluster TimescaleDB nebo mít PostgreSQL a povolit plugin TimescaleDB.
Nastavení pro PostgreSQL 13
Použití vašeho nastavení správce balíčků pro prostředí Linux s vaším úložištěm PostgreSQL a TimescaleDB je jednodušší. Zde jsou kroky, jak to udělat:
Nastavte požadovaná úložiště
Nejprve přidejte úložiště PostgreSQL.
Pro CentOS/RHEL/Oracle Linux
Musíte se ujistit, že máte správné úložiště. Pro Enterprise Linux (EL) 7 můžete provést následující:
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Pro jinou architekturu můžete založit zde https://download.postgresql.org/pub/repos/yum/reporpms/ a nahradit podadresář EL-7-x86_64.
Přidejme také úložiště TimescaleDB.
vi /etc/yum.repos.d/timescale_timescaledb.repo
Pak přidejte pro tento soubor následující obsah
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
Pokud používáte jinou verzi než EL 7, stačí odpovídajícím způsobem nahradit baseurl.
Pro Ubuntu/Debian
Přidat úložiště PG pro Ubuntu Focal:
deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
U ostatních distribucí Ubuntu/Debianu stačí odpovídajícím způsobem nahradit focal, který najdete zde http://apt.postgresql.org/pub/repos/apt/dists/. Například nahraďte focal-pgdg buster-pgdg.
Nyní přidáme úložiště pro TimescaleDB,
sudo sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list"
Importujte svazek klíčů
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring
a aktualizujte seznamy balíčků pro aktualizace pro balíčky, které vyžadují aktualizaci, a také pro nové balíčky, které právě přišly do repozitářů.
sudo apt-get update
Pokud používáte Debian z ubuntu, můžete podadresář v URL nahradit.
Teď, když máme úložiště připravené, můžeme začít.
Instalace PostgreSQL verze 13 s TimescaleDB a PostGIS
Instalaci PostgreSQL 13 lze provést na stejném hostiteli. Nejprve se musíte ujistit, že věci, jako je port databáze, jsou jedinečné. Jinými slovy, musí se lišit od aktuálního PostgreSQL 11 nainstalovaného na stejném hostiteli.
Pro CentOS/RHEL/Oracle Linux
Spusťte níže uvedený příkaz a nainstalujte PostgreSQL 13 a jeho závislé balíčky:
yum install postgresql13.x86_64 postgresql13-server.x86_64 postgresql13-contrib.x86_64 postgresql13-libs.x86_64
Potom inicializujte klastr databáze a jeho požadovanou kolekci databází spuštěním příkazu níže:
$ /usr/pgsql-13/bin/postgresql-13-setup initdb
V tuto chvíli by měly existovat dva datové adresáře pro PG 11 a PG 13:
[[email protected] ~]# ls -alth /var/lib/pgsql/* -d
drwx------. 4 postgres postgres 51 Sep 22 14:19 /var/lib/pgsql/13
drwx------. 4 postgres postgres 33 Sep 21 18:53 /var/lib/pgsql/11
Teď, když jsme dobří s PostgreSQL 13, pojďme nainstalovat TimescaleDB. Musíme se ujistit, že plugin, který se má nainstalovat, má stejnou verzi na PostreSQL 11.
Uvědomte si, že aby bylo zajištěno, že pg_upgrade bude fungovat hladce, měly by být zásuvné moduly vaší zdrojové a cílové verze hlavní verze stejné verze. Je to proto, že pg_upgrade vyhledá své určené knihovny propojené s pluginy nebo rozšířeními, které byly načteny nebo používány vaší starou nebo zdrojovou databázovou verzí vašeho PostgreSQL. Ve svém Enterprise Linuxu to můžete ověřit spuštěním showduplicates nebo ověřením pomocí níže uvedených informací, buď pomocí dnf nebo yum:
$ yum --showduplicates list timescaledb_13.x86_64 timescaledb-2-postgresql-13.x86_64 timescaledb-2-oss-postgresql-13.x86_64 timescaledb-2-loader-postgresql-13.x86_64|grep '2.3.1'
Repository pgdg-common is listed more than once in the configuration
timescaledb-2-loader-postgresql-13.x86_64 2.3.1-0.el7 timescale_timescaledb
timescaledb-2-oss-postgresql-13.x86_64 2.3.1-0.el7 timescale_timescaledb
timescaledb-2-postgresql-13.x86_64 2.3.1-0.el7 timescale_timescaledb
Nebo to ověřte pomocí možnosti info:
$ yum info timescaledb-2-loader-postgresql-13-2.3.1-0.el7.x86_64 timescaledb-2-postgresql-13-2.3.1-0.el7.x86_64
Nyní jsme připraveni nainstalovat balíček TimescaleDB pro verzi PG 13.
$ yum install timescaledb-2-loader-postgresql-13-2.3.1-0.el7.x86_64 timescaledb-2-postgresql-13-2.3.1-0.el7.x86_64
Až jej nainstalujete, můžete zkusit spustit nástroj timescaledb-tune a vyladit konfigurační soubor postgresql.conf. Stačí spustit příkaz níže:
$ timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config
Nyní nainstalujme balíček PostGIS také pro verzi PG 13.
$ yum install -y postgis31_13.x86_64
Pro Ubuntu/Debian
Stačí spustit:
$ apt install postgresql-client-13 postgresql-13
Skvělá věc na distribucích Ubuntu/Debian je, že existují nástroje pro PostgreSQL, které jsou velmi užitečné pro správu vašich clusterů PostgreSQL, jako jsou pg_lsclusters, pg_ctlcluster atd.
Můžete ověřit nainstalované dostupné clustery.
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
11 main 5432 online postgres /var/lib/postgresql/11/main log/postgresql-%Y-%m-%d_%H%M%S.log
13 main 5433 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
V Ubuntu/Debianu není potřeba měnit port, protože s ním bude manipulováno během instalační fáze a podle toho jej detekuje a nastavuje jedinečně.
Nyní nainstalujme TimescaleDB.
$ apt install timescaledb-2-loader-postgresql-13 timescaledb-2-postgresql-13
Volitelně můžete spustit nástroj timescaledb-tune k vyladění konfiguračního souboru postgresql.conf jednoduchým vyvoláním nástroje následovně:
$ timescaledb-tune
Nyní jsme připraveni nainstalovat balíček PostGIS pro PG 13.
$ apt install postgresql-13-postgis-3-scripts postgresql-13-postgis-3
Zkontrolujte svůj postgresql.conf
Vždy je lepší zkontrolovat konfigurační soubor postgresql.conf. Ve verzích Enterprise Linux můžete svůj postgresql.conf najít buď v adresáři data_directory, nebo v cestě PGDATA. Zatímco pro Ubuntu/Debian jej můžete najít v /etc/postgresql/<číslo-verze>/
shared_preload_libraries = 'pg_stat_statements,timescaledb' # pg_stat_statements is not required but if you are using ClusterControl, make sure this is appended.
port = 5532 # make sure that the port number is unique than the old version of your PostgreSQL
listen_address = * # depends on your setup but if you need to specify the available network interfaces to its IP addresses (IPv4 or IPv6) set it accordingly.
Doporučeným postupem je porovnat staré a nové verze vašich konfiguračních souborů PostgreSQL, abyste se ujistili, že váš postgresql.conf je identický s tím, co je potřeba a nastavený.
Než přistoupíme k dalšímu kroku, musíme také zkontrolovat, zda je správně načten váš PostgreSQL verze 13. Ujistěte se, že máte nejnovější verzi získanou nebo nainstalovanou ve vašem hostiteli. Spusťte databázi a ujistěte se, že se spouští a běží správně.
Chcete-li začít v distribucích EL, spusťte níže uvedený příkaz:
$ sudo -iu postgres /usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data/ -o "-c config_file=/var/lib/pgsql/13/data/postgresql.conf" start
nebo pro Ubuntu/Debian spusťte níže uvedený příkaz:
$ sudo -iu postgres /usr/lib/postgresql/13/bin/pg_ctl -D /var/lib/postgresql/13/main/ -o "-c config_file=/etc/postgresql/13/main/postgresql.conf" start
nebo pomocí nástroje pg_ctlcluster spusťte, restartujte nebo zastavte svůj PG Cluster.
Až budete připraveni, spusťte pg_upgrade…
Než budete pokračovat, ujistěte se, že máte vždy připravenou a dostupnou zálohu ze starého serveru. Než přistoupíte k velkému upgradu, vždy berte logické zálohování a fyzické zálohování jako osvědčený postup.
Nyní, když jste připraveni, můžete spustit pg_upgrade. V praxi musíte nejprve spustit pg_upgrade s kontrolou pro zjištění nekompatibility a problémů, než přistoupíte k hlavnímu postupu pg_upgrade. Před spuštěním pg_upgrade se ujistěte, že PG 11 i PG 13 jsou během provádění tohoto procesu mimo provoz. To jen znamená, že tento proces vyžaduje prostoje.
Chcete-li to provést, spusťte následující příkaz s volbou --check:
$ sudo -iu postgres /usr/lib/postgresql/13/bin/pg_upgrade -o "-c config_file=/etc/postgresql/11/main/postgresql.conf" --old-datadir=/var/lib/postgresql/11/main/ -O "-c config_file=/etc/postgresql/13/main/postgresql.conf" --new-datadir=/var/lib/postgresql/13/main/ --old-bindir=/usr/lib/postgresql/11/bin --new-bindir=/usr/lib/postgresql/13/bin --check
Nahraďte odpovídajícím způsobem hodnotu --old-datadir nebo soubor config_file, pokud se liší od vašeho nastavení.
To spustí kontroly kompatibility stejně jako výsledek níže:
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
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
Checking for new cluster tablespace directories ok
*Clusters are compatible*
Pokud všechny kontroly signalizují „ok“, znamená to úspěšnou kontrolu a spodní zpráva ukazuje, že clustery jsou kompatibilní, měli byste začít.
Nakonec spusťte příkaz znovu bez možnosti --check:
$ sudo -iu postgres /usr/lib/postgresql/13/bin/pg_upgrade -o "-c config_file=/etc/postgresql/11/main/postgresql.conf" --old-datadir=/var/lib/postgresql/11/main/ -O "-c config_file=/etc/postgresql/13/main/postgresql.conf" --new-datadir=/var/lib/postgresql/13/main/ --old-bindir=/usr/lib/postgresql/11/bin --new-bindir=/usr/lib/postgresql/13/bin
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
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
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 cluste 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
Checking for extension updates notice
Your installation contains extensions that should be updated
with the ALTER EXTENSION command. The file
update_extensions.sql
when executed by psql by the database superuser will update
these extensions.
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
V závislosti na velikosti vaší datové sady to může chvíli trvat. Ve výše uvedeném příkladu příkazu zkopíruje transakční protokoly, které jsou fyzickými soubory. Pokud je však váš disk malý, můžete použít volbu -k nebo --link, která používá pevné odkazy. Pokud vše půjde dobře, měl by vám poskytnout zprávy, jako je výše uvedená, s upozorněním na dokončení aktualizace a upozornění na aktualizaci rozšíření, která můžete mít. V tomto nastavení to jde hladce. Soubor update_extensions.sql obsahuje pouze následující:
$ cat update_extensions.sql
\connect postgres
ALTER EXTENSION "pg_stat_statements" UPDATE;
Jak jste si všimli, pg_upgrade provádí řadu akcí. Analyzuje všechny řádky ze zdrojového clusteru, kopíruje protokoly metadat transakcí a data o stavu více transakcí a ostatní.
Jakmile zjistíte, že vše vypadá dobře, spusťte skript analyze_new_cluster.sh, který se spustí
vacuumdb --all --analyze-only.
$ sudo -iu postgres PGPORT=5433 ./analyze_new_cluster.sh
Uvědomte si, že byste měli specifikovat port vašeho PostgreSQL 13, aby Vacuumdb fungoval správně na správném cílovém serveru.
V tomto případě je výsledek upgradu s povolenými rozšířeními TimescaleDB a PostGIS dobrý. Jakmile se vše objeví v pořádku, nezapomeňte spustit server a proveďte sérii testů a kontrol.
Otestujte proces upgradu
Proces upgradu vždy otestujte a zkontrolujte. Zde je několik tabulek a uživatelsky definovaná databáze, která obsahuje hypertabulky a tabulky PostGIS, které se spoléhají na použití geometrie a geografických prostorových typů a funkcí.
$ sudo -iu postgres psql -p5433
psql (13.4 (Ubuntu 13.4-1.pgdg20.04+1))
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+---------+-----------------------
mydb | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | postgres=CTc/postgres+
| | | | | =c/postgres
(4 rows)
postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=# set search_path="$user",public;
SET
mydb=# \dt+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
--------+-----------------+-------+----------+-------------+------------+-------------
public | conditions | table | postgres | permanent | 8192 bytes |
public | global_points | table | postgres | permanent | 16 kB |
public | roads | table | postgres | permanent | 16 kB |
public | sample_table | table | postgres | permanent | 8192 bytes |
public | spatial_ref_sys | table | postgres | permanent | 6968 kB |
(5 rows)
Kontrola některých mých PostGIS a hypertabulek:
mydb=# \d roads
Table "public.roads"
Column | Type | Collation | Nullable | Default
------------+----------------------+-----------+----------+---------
road_id | integer | | |
road_name | character varying | | |
roads_geom | geometry(LineString) | | |
mydb=# \d sample_table
Table "public.sample_table"
Column | Type | Collation | Nullable | Default
--------+--------------------------+-----------+----------+------------------------------------------
id | integer | | not null | nextval('sample_table_id_seq'::regclass)
time | timestamp with time zone | | not null |
name | character varying | | not null |
Indexes:
"sample_table_pkey" PRIMARY KEY, btree (id, "time")
"sample_table_time_idx" btree ("time" DESC)
Triggers:
ts_insert_blocker BEFORE INSERT ON sample_table FOR EACH ROW EXECUTE FUNCTION _timescaledb_internal.insert_blocker()
Number of child tables: 371 (Use \d+ to list them.)
mydb=# \d conditions
Table "public.conditions"
Column | Type | Collation | Nullable | Default
-------------+--------------------------+-----------+----------+---------
time | timestamp with time zone | | not null |
location | text | | not null |
location2 | character(10) | | not null |
temperature | double precision | | |
humidity | double precision | | |
Indexes:
"conditions_time_idx" btree ("time" DESC)
Triggers:
ts_insert_blocker BEFORE INSERT ON conditions FOR EACH ROW EXECUTE FUNCTION _timescaledb_internal.insert_blocker()
Number of child tables: 366 (Use \d+ to list them.)
mydb=# select count(*) from sample_table;
count
-------
2588
(1 row)
mydb=# SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);
name
--------
Town
Forest
(2 rows)
mydb=# SELECT n, ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewkt
mydb-# FROM (
mydb(# VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ),
mydb(# ( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )
mydb(# )As foo(the_geom)
mydb-# CROSS JOIN generate_series(1,100) n
mydb-# WHERE n <= ST_NumGeometries(the_geom);
n | geomewkt
---+-----------------------------------------
1 | POINT(1 2 7)
1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
2 | POINT(3 4 7)
2 | LINESTRING(10 11,12 11)
3 | POINT(5 6 7)
4 | POINT(8 9 10)
(6 rows)
Nyní je vše připraveno sloužit jako můj nový cluster.
Jakmile věci rozjedete, můžete spustit:
$ sudo -iu postgres ./delete_old_cluster.sh
Ujistěte se, že spouštíte pouze skript, protože se jedná o velmi nebezpečný skript, protože smaže všechny soubory ve vašem starém clusteru PostgreSQL.
Závěr
pg_upgrade je skvělý nástroj pro správu a upgrade vašeho databázového serveru PostgreSQL. Zvládne složitá nastavení, například s povolenými rozšířeními TimescaleDB nebo PostGIS. Ačkoli tento nástroj přichází se svými omezeními, nic nebrání jeho použití, zejména pro vaši práci DBA a na produkčních serverech kromě QA a vývojových prostředí.