PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Първи стъпки с Postgres 13 на Ubuntu 20.04

PostgreSQL 13, най-новата версия на софтуера за база данни Postgres, идва с много подобрения под капака. Въпреки че е най-популярната и гъвкава RDBMS с отворен код, не е най-лесната за настройка и започване. Прочетете, за да научите как можете да започнете с най-новата версия на Postgres на най-новата LTS версия на Ubuntuserver.

Инсталиране

Ubuntu 20.04 идва с Postgres 12 от неговата вселена хранилище. Тъй като искаме версия 13, можем директно да използваме официалното хранилище APT на проекта PostgreSQL. Това хранилище съдържа двоични файлове за Ubuntu 20.04 и също така включва пакети за различни разширения, които може да искате да инсталирате по-късно.

Нека настроим хранилището по следния начин (обърнете внимание, че „focal“ е кодовото име за 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

Вече можем да инсталираме PostgreSQL сървъра и други инструменти от командния ред, използвайки:

sudo apt-get install -y postgresql-13

Инсталацията прави няколко неща:

  • Той инсталира сървъра PostgreSQL, помощните програми и клиент от командния ред, нареченpsql .
  • Той създава потребител на системата на Linux, наречен postgres . Всички файлове с данни са собственост на този потребител и всички процеси се изпълняват като този потребител.
  • Той създава клъстер от база данни (виж отдолу). В този клъстер той създава база данни, наричана още postgres .
  • Той създава един потребител на PostgreSQL (не потребителят на системата Linux), наричан ощеpostgres . Този потребител на PostgreSQL има привилегии на суперпотребител.

Виждате, че това започва да става объркващо!

Клъстери от бази данни

От гледна точка на Postgres, вече имаме един клъстер от база данни, който работи и работи. Единичен клъстер на база данни може да съдържа една или повече бази данни. В клъстера на базата данни, който имаме сега, има база данни, наречена „postgres“. (Има и няколко „шаблонни“ бази данни, които можем да игнорираме засега.)

Клъстерът от база данни се управлява от основен postgres процес, наречен postmaster .Той поражда различни дъщерни процеси, които или изпълняват различни системни задачи, или обработват входящи клиентски връзки. Разгледайте текущите процеси:

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

Тук процесът на пощенския администратор е 4880 и е породил 6 дъщерни процеса, които обработват различни домакински дейности. Можете също да видите местоположението на клъстера (/var/lib/postgresql/13/main ) и местоположението на конфигурационния файл (/etc/postgresql/13/main/postgresql.conf ).

Повторно зареждане и рестартиране

В различни моменти може да се наложи да презаредите или рестартирайте вашият Postgres сървър. Презареждането кара Postgres да преразгледа своите конфигурационни файлове и да приложи промените. Ако няма промени в конфигурационните файлове, нищо лошо не се случва. Презареждането не нарушава текущо свързаните клиенти. За да презаредите вашия Postgres сървър, можете да направите:

sudo systemctl reload postgresql

Някои промени в конфигурацията ще влязат в сила само след като рестартирате сървъра. Това е по-разрушително и ще прекъсне връзката на всички свързани клиенти. За да рестартирате, можете:

sudo systemctl restart postgresql

Регистрационни файлове

Както можете да видите, има услуга systemd, наречена postgresql които можете да използвате, за да контролирате пощенския началник. Ако услугата не се стартира, можете да проверите състоянието й, за да проверите за съобщения за грешки:

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.

Сървърът на PostgreSQL записва регистрационен файл, който можете да проверите за по-подробни съобщения за грешки. Този файл се намира в /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

Свързване с вашия Postgres сървър

Сега, когато имаме нашия сървър, който работи, нека се опитаме да се свържем с него. По подразбиране сървърът слуша само:

  • TCP връзки от 127.0.0.1 на порт 5432 и
  • Сокети на Unix домейн в /var/run/postgresql

Поради конфигурацията по подразбиране, единственият начин да се свържете със сървъра в момента е чрез Unix сокета от процес, който се изпълнява като потребител на системата postgres . Нека стартираме стандартния интерактивен клиент psql като това:

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

postgres=#

Тук изпълняваме psql като системния потребител postgres („sudo -u postgres psql“) и се свързваме с базата данни, наречена „postgres“ (последният „postgres“ в командния ред.) Подканата „postgres=#“ показва, име на текущо свързаната база данни („postgres“) и че имаме привилегии на суперпотребител („#“ вместо „$“).

Връзката се осъществява чрез Unix сокети (това е методът по подразбиране в psql). Тъй като по подразбиране потребителят на postgres няма парола и конфигурацията по подразбиране изисква удостоверяване с парола за TCP връзки, не е възможно да се свържете през 127.0.0.1:5432 в момента .

Разрешаване на входящи връзки от вътрешна мрежа

Първо нека променим конфигурацията, за да позволим връзки от вътрешна мрежа. Ако приемем, че IP адресът на нашия сървър в тази мрежа е 10.1.2.3, можем да редактираме основния конфигурационен файл в /etc/postgresql/13/main/postgresql.conf и променете редовете:

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

до:

listen_addresses = 'localhost,10.1.2.3'

Също така трябва да кажем на Postgres да използва удостоверяване с парола за връзки, влизащи от тези мрежи. За това редактирайте друг конфигурационен файл, наречен /etc/postgresql/13/main/pg_hba.conf и променете реда:

host    all             all             127.0.0.1/32            md5

до:

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

(Ако приемем, че вътрешната мрежа е 10.1.0.0/16.)

Също така променихме md5 по подразбиране метод към по-новия и по-сигуренscram-sha-256 . Всички други поява на md5 във файла също трябва да се замени с scram-sha-256 . Ако вашето приложение или драйвер за база данни не поддържа този метод, продължете да използвате md5 вместо това.

За да влязат в сила тези промени, трябва да рестартирате сървъра:

sudo systemctl restart postgresql

Създаване на обикновен потребител и база данни

Почти сме там!

Вече можем да създадем обикновен потребител, с който нашето приложение може да се свързва, и база данни, върху която то има пълен контрол. Свържете се като суперпотребител postgres локално от машината на сървъра, за да направите това:

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=#

(Пропуснете първата команда, ако искате да използвате md5 вместо това.) Това създаде потребител, наречен alice с парола s3cr3tp@ss . Нека също така създадем база данни, която този потребител ще притежава:

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

Базата данни се нарича app1 . От алиса притежава тази база данни, всички операции в базата данни (като създаване на таблици, вмъкване на редове) са разрешени, ако приложението се свърже като потребител alice .

Нека опитаме да се свържем като alice , през мрежата:

~$ 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=>

Готино! Вече сме свързани с базата данни app1 като потребител alice .

Изтриване на бази данни, архивиране и възстановяване

Ето няколко трика, които могат да ви помогнат, докато продължавате да работите с вашия Postgresserver:

Изтриване на база данни

Можете да изтриете базата данни, която току-що създадохте („app1“), както следва:

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=>

Имайте предвид, че първо трябва да преминете към друга база данни, като използвате командата “\c” на psql.

За създаване на друга база данни или за пресъздаване на app1 , свържете се като суперпотребител и направете „СЪЗДАВАНЕ НА БАЗА ДАННИ“ както преди.

Архивиране на базата данни

Най-лесният начин да архивирате данните във вашата база данни е да използвате pg_dump като това:

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

Това създава SQL файл, наречен „backup.sql“, който съдържа всички SQL команди, необходими за пресъздаване на схемата и данните в базата данни app1 , в текстов формат. Можете да изпълните тези команди във всяка база данни и схемата и данните ще бъдат попълнени в тази база данни.

Прочетете повече за pg_dump тук.

Възстановяване на данни

SQL командният файл, който създадохте по-горе, може да бъде възстановен по следния начин:

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

Имайте предвид, че възстановихме схемата и данните в друга база данни, app2 . Командата „\i“ на psql ви позволява да изпълнявате SQL командите от файл.

Следващи стъпки

Има цял куп статии, уроци, видеоклипове и курсове, които да ви помогнат да научите по-добре с PostgreSQL. Прекарайте известно време обаче с официалната документация тук, която осигурява авторитетно и широко покритие на всички функции, синтаксис и пакетни помощни програми на PostgreSQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете поредния индикатор към дата в PostgreSQL

  2. Как да получите номер на ред в PostgreSQL

  3. Използване на колона псевдоним в клаузата where в Postgresql

  4. Pandas актуализира sql

  5. Изключете предупреждението в sqlalchemy