Virksomheder og virksomheder, der bruger gamle versioner af PostgreSQL (PG), står over for udfordringer, når de opgraderer til mindst den seneste stabile version fra PostgreSQL 12 eller PostgreSQL 13. Der er mange grunde til, at opgradering til den seneste version er en skal. Nogle af hovedårsagerne til dette er at drage fordel af dets kritiske forbedringer af dets indbyggede funktionaliteter, sikkerhedsopdateringer, ydeevneforbedringer og nye implementeringer, der er gavnlige for databasestyring.
Opgradering af PostgreSQL kommer med et par udfordringer, da det ikke er så nemt sammenlignet med andre almindelige databaser. Hvis du står over for denne type problemer, skal du ikke bekymre dig. PostgreSQL låser dig ikke op på en specifik version at bruge. I denne blog vil vi gennemgå et eksempel på denne udfordring, mens vi har en TimescaleDB og PostGIS installeret på en eksisterende PostgreSQL 11-vært.
Hvorfor pg_upgrade?
pg_upgrade har eksisteret i meget lang tid som et værktøj til at opgradere større versioner af PostgreSQL. Det er ikke nødvendigt at bruge dette værktøj til mindre versionsopgraderinger, hvilket betyder, at det ikke er nødvendigt at opgradere din nuværende version af 11.9 til 11.13.
Når du opgraderer din PostgreSQL til en større version med pg_upgrade, fungerer værktøjet ved at tillade, at de data, der er gemt i PostgreSQL-datafiler, opgraderes til en senere PostgreSQL-hovedversion. Dette fungerer uden behov for et datadump/genindlæsning, hvilket kan tage noget tid, hvis du har et stort datasæt.
Nu, her kommer balladen. PostgreSQL, især for større versionsudgivelser, er kendt for at have tilføjet nye funktioner, der ofte ændrer layoutet af systemtabellerne, men det interne datalagringsformat ændres sjældent. pg_upgrade bruger dette faktum til at udføre hurtige opgraderinger ved at oprette nye systemtabeller og blot genbruge de gamle brugerdatafiler. Hvis en fremtidig større udgivelse nogensinde ændrer datalagringsformatet på en måde, der gør det gamle dataformat ulæseligt, vil pg_upgrade ikke kunne bruges til sådanne opgraderinger. (Fællesskabet vil forsøge at undgå sådanne situationer.)
Nogle kan betragte pg_upgrade for at være farligt, især for produktionsmiljøet. Nå, dette værktøj er blevet meget brugt andre steder fra QA, til dev, til produktionsmiljøer. Det har sine begrænsninger eller forbehold, såsom den kendte Unicode eller tegnsæt gemt i dit datasæt. I så fald kan du overveje at bruge pg_dump/pg_restore, men det kan tage lidt tid at blive færdig, afhængigt af hvor store dine data er. For nyere versioner af PostgreSQL, såsom PG 14.0, kan du kun tage en dump/gendannelse (eller eksport/import) eller logisk replikering, ellers brug pg_upgrade.
For større datasæt kræver brug af pg_upgrade, at du kører dette på den samme vært, som som standard anvender en kopi af alle dine fysiske filer fra dit databibliotek. I så fald understøtter pg_upgrade indstillingen -k eller --link, hvilket betyder, at den vil bruge hårde links i stedet for at kopiere filer til den nye klynge.
pg_upgrade gør sit bedste for at sikre, at de gamle og nye klynger er binært kompatible, f.eks. ved at tjekke for kompatible kompileringstidsindstillinger, inklusive 32/64-bit binære filer. Det er også vigtigt, at eventuelle eksterne moduler er binært kompatible, selvom dette ikke kan kontrolleres af pg_upgrade.
pg_upgrade understøtter opgraderinger fra 8.4.X og nyere til den nuværende større udgivelse af PostgreSQL, inklusive snapshot- og betaudgivelser.
Her er situationen...
I denne opsætning brugte jeg ClusterControl til at implementere en PostgreSQL 11-databaseklynge til en enkelt node. Følgende er blevet testet på Centos 7 og Ubuntu Focal (20.04.1):
$ /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)
Så jeg fik følgende,
PostgreSQL-serverversion: 11.13
TidsskalaDB-version: 2.3.1
PostGIS-version: 3.1.4
Hvis du vil teste dette med ClusterControl, er der to måder at have TimescaleDB på. Du kan implementere en TimescaleDB-klynge eller have PostgreSQL og aktivere TimescaleDB-pluginnet.
Opsætning til din PostgreSQL 13
Det er nemmere at bruge din pakkehåndteringsopsætning til Linux-miljøet med dit PostgreSQL- og TimescaleDB-lager. Her er trinene til at gøre det:
Konfigurer de nødvendige arkiver
Lad os først tilføje PostgreSQL-lageret.
Til CentOS/RHEL/Oracle Linux
Du skal sikre dig, at du har det rigtige lager. For Enterprise Linux (EL) 7 kan du gøre følgende:
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
For anden arkitektur kan du basere dig her https://download.postgresql.org/pub/repos/yum/reporpms/ og erstatte EL-7-x86_64-undermappen.
Lad os også tilføje TimescaleDB-lageret.
vi /etc/yum.repos.d/timescale_timescaledb.repo
Tilføj derefter følgende indhold til denne fil,
[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
Bare udskift baseurl i overensstemmelse hermed, hvis du bruger en anden version end EL 7.
Til Ubuntu/Debian
Tilføj PG-lageret til Ubuntu Focal:
deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
For andre Ubuntu/Debian-distributioner skal du bare udskifte fokalen i overensstemmelse hermed, som du kan finde her http://apt.postgresql.org/pub/repos/apt/dists/. Udskift f.eks. focal-pgdg med buster-pgdg.
Lad os nu tilføje lageret for 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"
Importer nøgleringen,
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring
og opdatere pakkelisterne for opgraderinger til pakker, der skal opgraderes, såvel som nye pakker, der lige er kommet til lagrene.
sudo apt-get update
Du kan erstatte underbiblioteket i URL'en, hvis du bruger Debian fra ubuntu.
Nu hvor vi har depotet klar, er vi godt i gang.
Installer PostgreSQL version 13 med TimescaleDB og PostGIS
Installation af PostgreSQL 13 kan gøres på den samme vært. Først skal du sikre dig, at ting såsom databaseporten er unikke. Med andre ord skal den være forskellig fra den aktuelle PostgreSQL 11 installeret på den samme vært.
Til CentOS/RHEL/Oracle Linux
Kør kommandoen nedenfor for at installere PostgreSQL 13 og dens afhængige pakker:
yum install postgresql13.x86_64 postgresql13-server.x86_64 postgresql13-contrib.x86_64 postgresql13-libs.x86_64
Initialiser derefter databaseklyngen og dens nødvendige samling af databaser ved at køre kommandoen nedenfor:
$ /usr/pgsql-13/bin/postgresql-13-setup initdb
På dette tidspunkt skulle der være to datamapper både for PG 11 og 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
Nu hvor vi er gode med PostgreSQL 13, lad os installere TimescaleDB. Vi skal sikre os, at plugin'et, der skal installeres, er den samme version på PostreSQL 11.
Bemærk, at for at sikre, at pg_upgrade fungerer problemfrit, skal plugins til din kilde- og hovedversionsdestination være den samme version. Dette skyldes, at pg_upgrade vil lede efter dets udpegede biblioteker knyttet til plugins eller udvidelser, der er blevet indlæst eller brugt af din gamle eller kildedatabaseversion af din PostgreSQL. Du kan verificere dette i din Enterprise Linux ved at køre showduplicates eller ved at verificere med info ligesom nedenfor enten med dnf eller 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
Eller bekræft det med infoindstillingen:
$ 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
Nu er vi klar til at installere TimescaleDB-pakken til PG 13-versionen.
$ 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
Når du har installeret det, kan du prøve at køre timescaledb-tune-værktøjet for at justere din postgresql.conf-konfigurationsfil. Bare kør kommandoen nedenfor:
$ timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config
Lad os nu også installere PostGIS-pakken til PG 13-versionen.
$ yum install -y postgis31_13.x86_64
Til Ubuntu/Debian
Kør blot:
$ apt install postgresql-client-13 postgresql-13
Det fantastiske med Ubuntu/Debian-distributioner er, at der er værktøjer til PostgreSQL, som er meget praktiske til at administrere dine PostgreSQL-klynger, såsom pg_lsclusters, pg_ctlcluster osv.
Du kan bekræfte, at dine tilgængelige klynger er installeret.
$ 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
I Ubuntu/Debian er der ingen grund til at ændre porten, da den vil blive håndteret under installationsfasen, og den registrerer og indstiller den unikt i overensstemmelse hermed.
Lad os nu installere TimescaleDB.
$ apt install timescaledb-2-loader-postgresql-13 timescaledb-2-postgresql-13
Valgfrit kan du køre timescaledb-tune-værktøjet for at justere din postgresql.conf-konfigurationsfil ved blot at kalde værktøjet som følgende:
$ timescaledb-tune
Nu er vi klar til at installere PostGIS-pakken til PG 13.
$ apt install postgresql-13-postgis-3-scripts postgresql-13-postgis-3
Gennemgå din postgresql.conf
Det er altid bedre at gennemgå din postgresql.conf konfigurationsfil. I Enterprise Linux-versioner kan du finde din postgresql.conf enten i din data_directory eller PGDATA-sti. Hvorimod for Ubuntu/Debian, kan du finde det i /etc/postgresql/
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.
Det er bedste praksis at sammenligne dine gamle og nye versioner af dine PostgreSQL-konfigurationsfiler for at sikre, at din postgresql.conf er identisk med det, der er nødvendigt og indstillet.
Før vi fortsætter med næste trin, skal vi også kontrollere, at din PostgreSQL version 13 er indlæst i overensstemmelse hermed. Sørg for, at du har den seneste version købt eller installeret på din vært. Start databasen, og sørg for, at den starter og kører korrekt.
For at starte i EL-distributioner skal du køre kommandoen nedenfor:
$ 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
eller for Ubuntu/Debian, kør kommandoen nedenfor:
$ 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
eller brug pg_ctlcluster-værktøjet til at starte, genstarte eller stoppe din PG-klynge.
Når du er klar, kør pg_upgrade...
Inden du går videre, skal du først sikre dig, at du altid har din backup fra din gamle server klar og tilgængelig. Tag altid en logisk backup og fysisk backup som god praksis, før du fortsætter med en større opgradering.
Nu hvor du er klar, er du god til at køre pg_upgrade. I praksis skal du først køre pg_upgrade med en kontrol for at bestemme inkompatibiliteten og problemerne, før du fortsætter til hovedproceduren for pg_upgrade. Før du kører pg_upgrade, skal du sørge for, at både PG 11 og PG 13 er nede, mens du udfører denne proces. Det betyder blot, at der er behov for nedetid til denne proces.
For at gøre det skal du køre følgende kommando med --check mulighed:
$ 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
Erstat --old-datadir-værdien eller config_file i overensstemmelse hermed, hvis den er forskellig fra din opsætning.
Dette skal køre kompatibilitetstjek ligesom resultatet nedenfor:
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*
Hvis alle kontroller signalerer "ok", betyder det en vellykket kontrol, og den nederste meddelelse viser, at klynger er kompatible, så burde du være godt i gang.
Kør endelig kommandoen igen uden --check-indstillingen:
$ 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
Afhængigt af størrelsen på dit datasæt kan det tage lidt tid. I eksempelkommandoen ovenfor kopierer den transaktionsloggene, som er af fysiske filer. Men hvis din diskstørrelse er trang, kan du bruge -k eller --link muligheden, som bruger hårde links. Hvis alt går vel, bør det give dig beskeder som ovenstående, der giver dig besked om fuldstændig opgradering og meddelelser om at opdatere de udvidelser, du måtte have. I denne opsætning går det glat. Update_extensions.sql indeholder kun følgende:
$ cat update_extensions.sql
\connect postgres
ALTER EXTENSION "pg_stat_statements" UPDATE;
Som du har bemærket, udfører pg_upgrade en række handlinger. Den analyserer alle rækker fra kildeklyngen, kopierer transaktionsmetadatalogfiler og dens multitransaktionsstatusdata og resten.
Når du har fundet ud af, at alt ser godt ud, så kør analyse_new_cluster.sh-scriptet, som skal køre
vacuumdb --all --analyze-only.
$ sudo -iu postgres PGPORT=5433 ./analyze_new_cluster.sh
Bemærk, at du skal angive porten på din PostgreSQL 13, så vacuumdb kører korrekt til den rigtige målserver.
I dette tilfælde går opgraderingsresultatet med TimescaleDB og PostGIS-udvidelser aktiveret godt. Når alt vises i orden, skal du sørge for at starte serveren og udføre en række tests og kontroller.
Test opgraderingsprocessen
Test og gennemgå altid opgraderingsprocessen. Her er et par tabeller og en brugerdefineret database, som indeholder hypertabeller og PostGIS-tabeller, der er afhængige af at bruge geometri og geografi rumlige typer og funktioner.
$ 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)
Tjek nogle af mine PostGIS og hypertabeller:
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)
Nu ser alt ud til at være klar til at fungere som min nye klynge.
Når du har fået gang i tingene, kan du køre:
$ sudo -iu postgres ./delete_old_cluster.sh
Sørg for, at du kun kører scriptet, da dette er et meget farligt script, da det vil slette alle filer i din gamle PostgreSQL-klynge.
Konklusion
pg_upgrade er et fantastisk værktøj til at administrere og opgradere din PostgreSQL-databaseserver. Det kan håndtere komplekse opsætninger, såsom med TimescaleDB eller PostGIS-udvidelser aktiveret. Selvom dette værktøj kommer med sine begrænsninger, er der ingen stopper for at bruge det, især til dit DBA-arbejde og på produktionsservere bortset fra QA og udviklingsmiljøer.