# apt install postgresql postgresql-contrib
# -u postgres psql -c "SELECT version();"
PostgreSQL поддерживает несколько методов аутентификации . Наиболее часто используемые методы:
Аутентификация клиента PostgreSQL определяется в файле конфигурации с именем pg_hba.conf.
Пользователь «postgres» создается автоматически, в системе!!! и является суперпользователем для СУБД.
$ sudo su - postgres $ psql # PG Activity su postgres bash-4.4$ pg_activity
$ sudo su - postgres -c "createuser kylo" $ sudo su - postgres -c "createdb kylodb" psql$ GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;
По умолчанию сервер PostgreSQL слушает только локальный интерфейс 127.0.0.1.
$ sudo nano /etc/postgresql/11/main/postgresql.conf listen_addresses = '*' # what IP address(es) to listen on;
$ sudo nano /etc/postgresql/11/main/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD # The user jane will be able to access all databases from all locations using an md5 password host all jane 0.0.0.0/0 md5 host all jane 192.168.1.134 trust
CREATE DATABASE test_db; CREATE USER test_user WITH encrypted password 'dbpassword'; GRANT ALL privileges ON DATABASE test_db TO test_user; CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'Passw0rd';
# List TABLES \dt || SELECT * FROM pg_catalog.pg_tables; # Список пользователей \du # Права пользователя SELECT * FROM information_schema.table_privileges WHERE grantee = 'limit_view'; # Сменить пароль пользователю \password <username>
# Создаем нового пользователя, с разрешением логинится CREATE USER <логин> WITH login password '<пароль>'; # Настройку привилегий удобнее вынести в группу (роль), создаем роль с мин правами CREATE ROLE <роль> nosuperuser nocreatedb nocreaterole noreplication inherit; # Добавляем созданного пользователя в нее GRANT <роль> TO <логин>; # Далее настраиваем доступ (только SELECT) для группы, переходим в нужную базу \c <имя-базы> GRANT USAGE ON SCHEMA <имя-схемы> TO <роль>; GRANT SELECT ON ALL TABLES IN SCHEMA <имя-схемы> TO <роль>; # Удаление прав REVOKE usage ON schema <имя-схемы> FROM <роль>; REVOKE ALL ON ALL TABLES IN schema <имя-схемы> FROM <роль>; </sql> </details> ==== USER Managment ==== :!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, но это не обязательно. Роли базы данных являются глобальными для всей установки кластера базы данных (а не для отдельной базы данных).\\ <code sql> CREATE ROLE name; DROP ROLE name; createuser name dropuser name SELECT rolname FROM pg_roles;
Роль базы данных может иметь ряд атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиента
CREATE USER эквивалентен CREATE ROLE, за исключением того, что CREATE USER предполагает LOGIN по умолчанию, а CREATE ROLE — нет.
Атрибуты роли можно изменить после создания с помощью ALTER ROLE
ALTER ROLE myname SET enable_indexscan TO off;
GRANT UPDATE ON accounts TO joe; REVOKE ALL ON accounts FROM PUBLIC;
ALTER ROLE super WITH PASSWORD 'secret123';
\l - список баз \c <dbname> выбор базы
# Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы sudo -u postgres psql -lA | sed -e "s/|/\t/g" sudo -i -u postgres psql -d zabbix -c "select * from functions ;"
# Узнать размер базы sudo -u postgres psql -c "SELECT pg_size_pretty( pg_database_size( 'DBName' ) );" # Активные подключения к базе SELECT * from pg_stat_activity where datname = 'mgat_R1789_0-11-g33f30064_20221209_110115_1820'; # Предотвращаем возможность новых подключений UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'database_name'; # Закрываем текущие сессии SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'database_name' AND pid <> pg_backend_pid(); # Удалить DROP DATABASE database_name; # Переименовать базу alter database test rename to test1;
Еще настройка
echo export PATH=/usr/pgsql-15/bin:$PATH > /var/lib/pgsql/.pgsql_profile export PGPORT=27953
Экспорт/Импорт
описание
su - postgres -c "pg_dump -p 27953 -Fc postgres > /tmp/postgres_db.dump" # Базу нужно создать перед восстановлением su - postgres -c "pg_restore --dbname=test_postgres /tmp/postgres_db.dump" # Полный бекап pg_dumpall -h localhost -p 27953 -U backuper --schema-only --file /tmp/db_dump.sql # Восстановление psql -U postgres -p 27953 -f /tmp/db_dump.sql
pg_lsclusters pg_ctlcluster pg_ctlcluster 9.4 secondary reload/start/stop
#!/bin/bash export LIQUIBASE_HOME=`pwd` java -jar internal/lib/liquibase-core.jar update \ --changelog-file=0001_changelog.xml \ --url=jdbc:postgresql://99.99.99.99:5432/my_db?currentSchema=my_schema \ --username=postgres \ --password=postgres
В подпапке «internal/lib/» располагаются еще целый ряд джарок для liqubase