sql >> Databáze >  >> RDS >> PostgreSQL

Začínáme s Postgres 13 na Ubuntu 20.04

PostgreSQL 13, nejnovější vydání databázového softwaru Postgres, přichází s mnoha skrytými vylepšeními. Přestože jde o nejpopulárnější a nejuniverzálnější open-source RDBMS v okolí, není nejjednodušší nastavit a začít. Čtěte dále a zjistěte, jak můžete začít pracovat s nejnovější verzí Postgres na nejnovější verzi LTS Ubuntuserveru.

Instalace

Ubuntu 20.04 přichází s Postgres 12 z vesmíru úložiště. Protože chceme verzi 13, můžeme přímo používat oficiální repozitář APT projektu PostgreSQL. Toto úložiště obsahuje binární soubory pro Ubuntu 20.04 a také balíčky pro různá rozšíření, která si možná budete chtít nainstalovat později.

Nastavíme úložiště takto (všimněte si, že „focal“ je kódové jméno pro Ubuntu 20.04):

# add the repository
sudo tee /etc/apt/sources.list.d/pgdg.list <<END
deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
END

# get the signing key and import it
wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo apt-key add ACCC4CF8.asc

# fetch the metadata from the new repo
sudo apt-get update

Nyní můžeme nainstalovat server PostgreSQL a další nástroje příkazového řádku pomocí:

sudo apt-get install -y postgresql-13

Instalace provádí několik věcí:

  • Nainstaluje server PostgreSQL, nástroje a klienta příkazového řádku s názvempsql .
  • Vytváří uživatele systému Linux s názvem postgres . Všechny datové soubory jsou ve vlastnictví tohoto uživatele a všechny procesy běží jako tento uživatel.
  • Vytváří databázový cluster (viz. níže). V tomto clusteru vytváří databázi, nazývanou také postgres .
  • Vytvoří jednoho uživatele PostgreSQL (ne uživatel systému Linux), také nazývanýpostgres . Tento uživatel PostgreSQL má oprávnění superuživatele.

Můžete vidět, že to začíná být matoucí!

Databázové clustery

Z hlediska Postgresu máme nyní v provozu jeden databázový cluster. Jediný databázový cluster může obsahovat jednu nebo více databází. V databázovém clusteru, který nyní máme, je databáze nazvaná „postgres“. (Existuje také několik „šablonových“ databází, které můžeme prozatím ignorovat.)

Databázový cluster je spravován hlavním postgresovým procesem zvaným postmaster .Vytváří různé podřízené procesy, které buď provádějí různé systémové úlohy nebo se starají o příchozí připojení klientů. Podívejte se na aktuálně běžící procesy:

alice@ubu:~$ ps -o uname,pid,ppid,cmd -H -U postgres
USER         PID    PPID CMD
postgres    4880       1 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
postgres    4882    4880   postgres: 13/main: checkpointer
postgres    4883    4880   postgres: 13/main: background writer
postgres    4884    4880   postgres: 13/main: walwriter
postgres    4885    4880   postgres: 13/main: autovacuum launcher
postgres    4886    4880   postgres: 13/main: stats collector
postgres    4887    4880   postgres: 13/main: logical replication launcher

Zde je postmaster proces 4880 a vytvořil 6 podřízených procesů, které se starají o různé činnosti spojené s úklidem. Můžete také vidět umístění clusteru (/var/lib/postgresql/13/main ) a umístění konfiguračního souboru (/etc/postgresql/13/main/postgresql.conf ).

Opětovné načtení a restartování

V různých časech může být nutné načíst znovu nebo restartujte váš server Postgres. Opětovné načtení způsobí, že Postgres znovu prozkoumá konfigurační soubory a použije změny. Pokud nedojde k žádným změnám v konfiguračních souborech, nic špatného se nestane. Opětovné načtení neruší aktuálně připojené klienty. Chcete-li znovu načíst server Postgres, můžete:

sudo systemctl reload postgresql

Některé změny konfigurace se projeví až po restartování serveru. To je rušivější a odpojí všechny připojené klienty. Chcete-li restartovat, můžete:

sudo systemctl restart postgresql

Soubory protokolu

Jak můžete vidět, existuje služba systemd s názvem postgresql které můžete použít k ovládání poštmistra. Pokud se služba nespustí, můžete zkontrolovat její stav a zkontrolovat chybové zprávy:

alice@ubu:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2020-10-29 04:52:29 UTC; 25min ago
   Main PID: 4557 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 1075)
     Memory: 0B
     CGroup: /system.slice/postgresql.service

Oct 29 04:52:29 ubu systemd[1]: Starting PostgreSQL RDBMS...
Oct 29 04:52:29 ubu systemd[1]: Finished PostgreSQL RDBMS.

Server PostgreSQL zapisuje soubor protokolu, ve kterém můžete zkontrolovat podrobnější chybové zprávy. Tento soubor se nachází na adrese /var/log/postgresql/postgresql-13-main.log :

alice@ubu:~$ cat /var/log/postgresql/postgresql-13-main.log
2020-10-29 04:52:34.096 UTC [4880] LOG:  starting PostgreSQL 13.0 (Ubuntu 13.0-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0, 64-bit
2020-10-29 04:52:34.097 UTC [4880] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2020-10-29 04:52:34.099 UTC [4880] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-10-29 04:52:34.106 UTC [4881] LOG:  database system was shut down at 2020-10-29 04:52:31 UTC
2020-10-29 04:52:34.112 UTC [4880] LOG:  database system is ready to accept connections

Připojování k vašemu serveru Postgres

Nyní, když máme náš server v provozu, zkusme se k němu připojit. Ve výchozím nastavení server naslouchá pouze:

  • Připojení TCP z 127.0.0.1 na portu 5432 a
  • Doménové sokety Unix v /var/run/postgresql

Kvůli výchozí konfiguraci je nyní jediný způsob, jak se připojit k serveru přes Unixový soket z procesu, který běží jako systémový uživatel postgres . Spusťte standardního interaktivního klienta psql takhle:

alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.

postgres=#

Zde spouštíme psql jako systémový uživatel postgres („sudo -u postgres psql“) a připojujeme se k databázi s názvem „postgres“ (poslední „postgres“ na příkazovém řádku.) Výzva „postgres=#“ označuje název aktuálně připojené databáze („postgres“) a že máme oprávnění superuživatele („#“ na rozdíl od „$“).

Připojení proběhlo přes Unixové sokety (toto je výchozí metoda v psql). Protože uživatel postgres ve výchozím nastavení nemá heslo a výchozí konfigurace vyžaduje ověření heslem pro připojení TCP, není možné se nyní připojit přes 127.0.0.1:5432 .

Povolení příchozích připojení z interní sítě

Nejprve změňme konfiguraci tak, aby umožňovala připojení z interní sítě. Za předpokladu, že IP našeho serveru v této síti je 10.1.2.3, můžeme upravit hlavní konfigurační soubor na /etc/postgresql/13/main/postgresql.conf a změňte řádky:

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all

komu:

listen_addresses = 'localhost,10.1.2.3'

Musíme také Postgres sdělit, aby používal ověřování heslem pro připojení přicházející z těchto sítí. Za tímto účelem upravte jiný konfigurační soubor s názvem /etc/postgresql/13/main/pg_hba.conf a změňte řádek:

host    all             all             127.0.0.1/32            md5

komu:

host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             10.1.0.0/16             scram-sha-256

(Za předpokladu, že vnitřní síť je 10.1.0.0/16.)

Změnili jsme také výchozí md5 metoda na novější a bezpečnějšíscram-sha-256 . Všechny ostatní výskyty md5 v souboru by měl být také nahrazen scram-sha-256 . Pokud vaše aplikace nebo databázový ovladač nepodporuje tuto metodu, nadále používejte md5 místo toho.

Aby se tyto změny projevily, musíte restartovat server:

sudo systemctl restart postgresql

Vytvoření běžného uživatele a databáze

Už jsme skoro tam!

Nyní můžeme vytvořit běžného uživatele, ke kterému se naše aplikace může připojit, a databázi, nad kterou má plnou kontrolu. Připojte se jako superuživatel postgres lokálně ze serveru, abyste to provedli:

alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.

postgres=# SET password_encryption = 'scram-sha-256';
SET
postgres=# CREATE USER alice PASSWORD 's3cr3tp@ss';
CREATE ROLE
postgres=#

(Pokud chcete použít md5, vynechejte první příkaz Místo toho.) Tím se vytvořil uživatel s názvem alice s heslem s3cr3tp@ss . Vytvořme také databázi, kterou bude tento uživatel vlastnit:

postgres=# CREATE DATABASE app1 OWNER alice;
CREATE DATABASE
postgres=#

Databáze se nazývá app1 . Od alice vlastní tuto databázi, všechny operace v rámci databáze (jako je vytváření tabulek, vkládání řádků) jsou povoleny, pokud se aplikace připojí jako uživatel alice .

Zkusme se připojit jako alka , po síti:

~$ psql -h 10.1.2.3 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

app1=>

Chladný! Nyní jsme připojeni k databázi app1 jako uživatel alice .

Mazání databází, zálohování a obnova

Zde je několik triků, které vám mohou pomoci při další práci s vaším Postgresserverem:

Odstranění databáze

Databázi, kterou jste právě vytvořili ("app1"), můžete smazat takto:

alice@ubu:~$ psql -h 127.0.0.1 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

app1=> \c postgres
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "postgres" as user "alice".
postgres=> DROP DATABASE app1;
DROP DATABASE
postgres=>

Všimněte si, že se musíte nejprve přepnout do jiné databáze pomocí příkazu „\c“ psql.

Chcete-li vytvořit další databázi nebo znovu vytvořit app1 , připojte se jako superuživatel a proveďte „CREATE DATABASE“ jako dříve.

Zálohujte databázi

Nejjednodušší způsob, jak zálohovat data v databázi, je použít pg_dump takhle:

alice@ubu:~$ pg_dump -h 127.0.0.1 -U alice -f backup.sql app1
Password:

Tím se vytvoří soubor SQL s názvem „backup.sql“, který obsahuje všechny příkazy SQL potřebné k opětovnému vytvoření schématu a dat v databázi app1 , v textovém formátu. Tyto příkazy můžete spustit v jakékoli databázi a schéma a data se do této databáze naplní.

Přečtěte si více o pg_dump zde.

Obnova dat

Soubor příkazu SQL, který jste vytvořili výše, lze obnovit takto:

alice@ubu:~$ psql -h 127.0.0.1 -U alice app2
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

app2=> \i backup.sql
SET
SET
(..snip..)

Všimněte si, že jsme obnovili schéma a data do jiné databáze, app2 . Příkaz „\i“ psql vám umožňuje spouštět příkazy SQL ze souboru.

Další kroky

Existuje celá řada článků, tutoriálů, videí a kurzů, které vám pomohou lépe pracovat s PostgreSQL. Věnujte však nějaký čas oficiální dokumentaci zde, která poskytuje autoritativní a rozsáhlé pokrytí všech funkcí PostgreSQL, syntaxe a přidružených utilit.


  1. Jak spustit úlohu SQL Server Agent pomocí T-SQL

  2. Návrh datového modelu pro systém rezervace hotelových pokojů

  3. Dynamická alternativa k pivotu s CASE a GROUP BY

  4. Implementace fulltextového vyhledávání v SQL Server 2016 pro pokročilé uživatele