sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL 11 upgraden naar PostgreSQL 13 met TimescaleDB en PostGIS in Linux met pg_upgrade

Bedrijven en ondernemingen die oude versies van PostgreSQL (PG) gebruiken, worden geconfronteerd met uitdagingen bij het upgraden naar ten minste de meest recente stabiele versie van PostgreSQL 12 of PostgreSQL 13. Er zijn veel redenen waarom upgraden naar de nieuwste versie een moeten. Enkele van de belangrijkste redenen hiervoor zijn om te profiteren van de essentiële verbeteringen aan de ingebouwde functionaliteiten, beveiligingsupdates, prestatieverbeteringen en nieuwe implementaties die gunstig zijn voor databasebeheer.

Het upgraden van PostgreSQL brengt een aantal uitdagingen met zich mee, aangezien het niet zo eenvoudig is in vergelijking met andere reguliere databases. Als u met dit soort problemen wordt geconfronteerd, hoeft u zich geen zorgen te maken. PostgreSQL sluit u niet op voor een specifieke versie om te gebruiken. In deze blog zullen we een voorbeeld van deze uitdaging doornemen terwijl we een TimescaleDB en PostGIS hebben geïnstalleerd op een bestaande PostgreSQL 11-host.

Waarom pg_upgrade?

pg_upgrade bestaat al heel lang als een tool voor het upgraden van belangrijke versies van PostgreSQL. Het gebruik van deze tool is niet vereist voor kleine versie-upgrades, wat betekent dat het upgraden van uw huidige versie van 11.9 naar 11.13 niet nodig is.

Bij het upgraden van uw PostgreSQL naar een hoofdversie met pg_upgrade, werkt de tool doordat de gegevens die zijn opgeslagen in PostgreSQL-gegevensbestanden kunnen worden geüpgraded naar een latere PostgreSQL-hoofdversie. Dit werkt zonder dat een data dump/reload nodig is, wat enige tijd kan duren als je een grote dataset hebt.

Nu komt de ophef. Het is bekend dat PostgreSQL, vooral voor grote versie-releases, nieuwe functies heeft toegevoegd die vaak de lay-out van de systeemtabellen veranderen, maar het interne gegevensopslagformaat verandert zelden. pg_upgrade gebruikt dit feit om snelle upgrades uit te voeren door nieuwe systeemtabellen te maken en eenvoudigweg de oude gebruikersgegevensbestanden opnieuw te gebruiken. Als een toekomstige grote release ooit het gegevensopslagformaat zodanig verandert dat het oude gegevensformaat onleesbaar wordt, zal pg_upgrade niet bruikbaar zijn voor dergelijke upgrades. (De gemeenschap zal proberen dergelijke situaties te vermijden.)

Sommigen beschouwen pg_upgrade als gevaarlijk, vooral voor de productieomgeving. Welnu, deze tool is op grote schaal elders gebruikt, van QA, tot dev, tot productieomgevingen. Het heeft zijn beperkingen of kanttekeningen, zoals de bekende Unicode of tekensets die zijn opgeslagen in uw dataset. In dat geval kunt u overwegen om pg_dump/pg_restore te gebruiken, maar het kan even duren voordat het klaar is, afhankelijk van hoe groot uw gegevens zijn. Voor nieuwere versies van PostgreSQL, zoals PG 14.0, kunt u alleen een dump/restore (of export/import) of logische replicatie uitvoeren, anders pg_upgrade gebruiken.

Voor grotere datasets, vereist het gebruik van pg_upgrade dat je dit op dezelfde host uitvoert, die standaard een kopie toepast van al je fysieke bestanden uit je datadirectory. In dat geval ondersteunt pg_upgrade de optie -k of --link, wat betekent dat het harde links gebruikt in plaats van bestanden naar het nieuwe cluster te kopiëren.

pg_upgrade doet zijn best om ervoor te zorgen dat de oude en nieuwe clusters binair compatibel zijn, bijvoorbeeld door te controleren op compatibele instellingen voor compileren, inclusief 32/64-bits binaire bestanden. Het is ook belangrijk dat externe modules binair compatibel zijn, hoewel dit niet kan worden gecontroleerd door pg_upgrade.

pg_upgrade ondersteunt upgrades van 8.4.X en hoger naar de huidige hoofdrelease van PostgreSQL, inclusief snapshot- en bètareleases.

Dit is de situatie...

In deze opstelling heb ik ClusterControl gebruikt om een ​​PostgreSQL 11-databasecluster voor een enkel knooppunt te implementeren. Het volgende is getest op Centos 7 en 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)

Dus ik heb het volgende,

PostgreSQL-serverversie: 11.13

TimescaleDB-versie: 2.3.1

PostGIS-versie: 3.1.4

Als je dit met ClusterControl wilt testen, zijn er twee manieren om TimescaleDB te gebruiken. U kunt een TimescaleDB-cluster implementeren of PostgreSQL gebruiken en de TimescaleDB-plug-in inschakelen.

Instellen voor uw PostgreSQL 13

Het gebruik van uw pakketbeheerconfiguratie voor de Linux-omgeving met uw PostgreSQL- en TimescaleDB-repository is eenvoudiger. Hier zijn de stappen om dit te doen:

Stel de vereiste opslagplaatsen in

Laten we eerst de PostgreSQL-repository toevoegen.

Voor CentOS/RHEL/Oracle Linux

Je moet ervoor zorgen dat je de juiste repository hebt. Voor Enterprise Linux (EL) 7 kunt u het volgende doen:

sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Voor andere architectuur kun je hier https://download.postgresql.org/pub/repos/yum/reporpms/ baseren en de submap EL-7-x86_64 vervangen.

Laten we ook de TimescaleDB-repository toevoegen.

vi /etc/yum.repos.d/timescale_timescaledb.repo

Voeg vervolgens de volgende inhoud toe voor dit bestand,

[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

Vervang de baseurl dienovereenkomstig als u een andere versie dan EL 7 gebruikt.

Voor Ubuntu/Debian

Voeg de PG-repository voor Ubuntu Focal toe:

deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main

Voor andere Ubuntu/Debian-distributies vervangt u de focal dienovereenkomstig, die u hier kunt vinden http://apt.postgresql.org/pub/repos/apt/dists/. Vervang bijvoorbeeld focal-pgdg door buster-pgdg.

Laten we nu de repository voor TimescaleDB toevoegen,

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"

Importeer de sleutelhanger,

wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring

en werk de pakketlijsten bij voor upgrades voor pakketten die geüpgraded moeten worden, evenals voor nieuwe pakketten die net naar de repositories zijn gekomen.

sudo apt-get update

U kunt de submap in de URL vervangen als u Debian van ubuntu gebruikt.

Nu we de repository klaar hebben, zijn we klaar om te gaan.

Installeer PostgreSQL versie 13 met TimescaleDB en PostGIS

Het installeren van PostgreSQL 13 kan op dezelfde host worden gedaan. Ten eerste moet u ervoor zorgen dat zaken als de databasepoort uniek zijn. Met andere woorden, het moet anders zijn dan de huidige PostgreSQL 11 die op dezelfde host is geïnstalleerd.

Voor CentOS/RHEL/Oracle Linux

Voer de onderstaande opdracht uit om PostgreSQL 13 en de bijbehorende pakketten te installeren: 

yum install postgresql13.x86_64 postgresql13-server.x86_64 postgresql13-contrib.x86_64 postgresql13-libs.x86_64  

Initialiseer vervolgens het databasecluster en de vereiste verzameling databases door de onderstaande opdracht uit te voeren:

$ /usr/pgsql-13/bin/postgresql-13-setup initdb

Op dit moment zouden er twee gegevensmappen moeten zijn voor zowel PG 11 als 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 we goed zijn met PostgreSQL 13, gaan we TimescaleDB installeren. We moeten ervoor zorgen dat de te installeren plug-in dezelfde versie is op PostreSQL 11. 

Houd er rekening mee dat, om er zeker van te zijn dat pg_upgrade soepel zal werken, de plug-ins van je broncode en de hoofdversie dezelfde versie moeten zijn. Dit komt omdat pg_upgrade zoekt naar de toegewezen bibliotheken die zijn gekoppeld aan de plug-ins of extensies die zijn geladen of gebruikt door uw oude of brondatabaseversie van uw PostgreSQL. Je kunt dit verifiëren in je Enterprise Linux door showduplicates uit te voeren of door te verifiëren met info zoals hieronder, ofwel met dnf of 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

Of verifieer het met de info-optie:

$ 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 zijn we klaar om het TimescaleDB-pakket voor de PG 13-versie te installeren.

$ 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

Nadat je het hebt geïnstalleerd, kun je proberen de tool timescaledb-tune uit te voeren om je postgresql.conf-configuratiebestand af te stemmen. Voer gewoon de onderstaande opdracht uit:

$  timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config

Laten we nu ook het PostGIS-pakket voor de PG 13-versie installeren.

$ yum install -y postgis31_13.x86_64 

Voor Ubuntu/Debian

Gewoon uitvoeren:

$  apt install postgresql-client-13 postgresql-13

Het mooie van Ubuntu/Debian-distributies is dat er tools voor PostgreSQL zijn die erg handig zijn voor het beheren van je PostgreSQL-clusters, zoals pg_lsclusters,  pg_ctlcluster, enz. 

U kunt controleren of uw beschikbare clusters zijn geïnstalleerd.

$ 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

In Ubuntu/Debian is het niet nodig om de poort te wijzigen, aangezien deze tijdens de installatiefase wordt afgehandeld en deze dienovereenkomstig detecteert en uniek instelt.

Laten we nu TimescaleDB installeren.

$ apt install timescaledb-2-loader-postgresql-13 timescaledb-2-postgresql-13

Optioneel kunt u de tool timescaledb-tune gebruiken om uw postgresql.conf-configuratiebestand af te stemmen door de tool als volgt aan te roepen:

$ timescaledb-tune

Nu zijn we klaar om het PostGIS-pakket voor PG 13 te installeren.

$ apt install postgresql-13-postgis-3-scripts postgresql-13-postgis-3

Bekijk je postgresql.conf

Het is altijd beter om je postgresql.conf-configuratiebestand te bekijken. In Enterprise Linux-versies kunt u uw postgresql.conf vinden in uw data_directory of in uw PGDATA-pad. Terwijl u Ubuntu/Debian kunt vinden in /etc/postgresql///postgresql.conf. Zorg ervoor dat in uw postgresql.conf de volgende regels correct zijn geconfigureerd:

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.

Het is het beste om uw oude en nieuwe versies van uw PostgreSQL-configuratiebestanden te vergelijken om er zeker van te zijn dat uw postgresql.conf identiek is aan wat nodig is en ingesteld is.

Voordat we verder gaan met de volgende stap, moeten we ook controleren of uw PostgreSQL-versie 13 dienovereenkomstig is geladen. Zorg ervoor dat u de nieuwste versie hebt verkregen of geïnstalleerd in uw host. Start de database en zorg ervoor dat deze correct start en werkt.

Voer de onderstaande opdracht uit om in EL-distributies te starten:

$ 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

of voor Ubuntu/Debian, voer de onderstaande opdracht uit:

$ 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

of gebruik de tool pg_ctlcluster om uw PG-cluster te starten, opnieuw op te starten of te stoppen.

Als je klaar bent, voer je pg_upgrade uit...

Voordat u verder gaat, moet u er eerst voor zorgen dat u altijd uw back-up van uw oude server gereed en beschikbaar heeft. Neem altijd een logische back-up en fysieke back-up als goede gewoonte voordat u doorgaat met een grote upgrade.

Nu je klaar bent, kun je pg_upgrade uitvoeren. In de praktijk moet u eerst pg_upgrade uitvoeren met een controle om de incompatibiliteit en problemen vast te stellen voordat u verdergaat met de hoofdprocedure van pg_upgrade. Voordat u de pg_upgrade uitvoert, moet u ervoor zorgen dat zowel PG 11 als PG 13 niet actief zijn terwijl u dit proces uitvoert. Dat betekent alleen dat er downtime nodig is voor dit proces.

Voer hiervoor het volgende commando uit met --check optie:

$ 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

Vervang de --old-datadir waarde of config_file dienovereenkomstig als deze afwijkt van uw instellingen.

Hiermee worden compatibiliteitscontroles uitgevoerd, net zoals het onderstaande resultaat:

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*

Als alle controles "ok" aangeven, wat een geslaagde controle betekent, en het onderste bericht laat zien dat clusters compatibel zijn, dan zou je goed moeten zijn om te gaan.

Voer de opdracht ten slotte opnieuw uit zonder de optie --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

Afhankelijk van de grootte van uw dataset, kan het even duren. In de voorbeeldopdracht hierboven kopieert het de transactielogboeken, die van fysieke bestanden zijn. Als uw schijf echter krap is, kunt u de optie -k of --link gebruiken, die harde koppelingen gebruikt. Als alles goed gaat, zou het u moeten voorzien van berichten zoals de bovenstaande die u op de hoogte stellen van de volledige upgrade en kennisgevingen om de extensies die u mogelijk heeft bij te werken. In deze opstelling gaat het vlot. De update_extensions.sql bevat alleen het volgende:

$ cat update_extensions.sql
\connect postgres
ALTER EXTENSION "pg_stat_statements" UPDATE;

Zoals je hebt opgemerkt, voert pg_upgrade een reeks acties uit. Het analyseert alle rijen van het broncluster, kopieert transactiemetadatalogboeken en de multi-transactiestatusgegevens en de rest.

Zodra je erachter bent gekomen dat alles er goed uitziet, voer je het analyse_new_cluster.sh-script uit, dat wordt uitgevoerd

vacuumdb --all --analyze-only.
$ sudo -iu postgres PGPORT=5433 ./analyze_new_cluster.sh

Houd er rekening mee dat u de poort van uw PostgreSQL 13 moet specificeren, zodat vacuumdb correct naar de juiste doelserver wordt uitgevoerd.

In dit geval verloopt de upgrade met de TimescaleDB- en PostGIS-extensies ingeschakeld goed. Zodra alles in orde is, moet u ervoor zorgen dat u de server start en een reeks tests en controles uitvoert.

Test het upgradeproces

Test en controleer altijd het upgradeproces. Hier zijn een paar tabellen en een door de gebruiker gedefinieerde database, die hypertabellen en PostGIS-tabellen bevat die afhankelijk zijn van het gebruik van ruimtelijke typen en functies van geometrie en geografie.

$ 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)

Sommige van mijn PostGIS en hypertabellen controleren:

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 lijkt alles klaar om als mijn nieuwe cluster te dienen.

Als je eenmaal aan de slag bent, kun je het volgende uitvoeren:

$ sudo -iu postgres ./delete_old_cluster.sh

Zorg ervoor dat u alleen het script uitvoert, aangezien dit een zeer gevaarlijk script is, aangezien het alle bestanden in uw oude PostgreSQL-cluster zal verwijderen.

Conclusie

pg_upgrade is zo'n geweldig hulpmiddel voor het beheren en upgraden van uw PostgreSQL-databaseserver. Het kan complexe instellingen aan, zoals met TimescaleDB- of PostGIS-extensies ingeschakeld. Hoewel deze tool zijn beperkingen heeft, is het gebruik ervan niet te stoppen, vooral voor uw DBA-werk en op productieservers, afgezien van QA- en ontwikkelomgevingen.


  1. De OID van een tabel in Postgres 9.1 bepalen?

  2. Oracle's standaard DATE-indeling

  3. Beste databasesoftware voor ontwikkelaars (2022-editie)

  4. Toegangsrechten voor databases instellen