заметки об администрировании и python. Траблшутинг в «примерах» и HOWTO.

😎 О себе | 📚 Литература и ресурсы | ⚡ Все посты | 📮 E-mail
8 заметок с тегом

PostgreSQL

PostgreSQL: завершить сессию

Получаем pid’ы


select * from pg_stat_activity;

подставляем полученный pid


select pg_terminate_backend(pid) 
from pg_stat_activity
where pid = 'PID';

 Нет комментариев    63   2 мес   PostgreSQL   SQL

pg_dump без установки PostgreSQL в macOS

Для быстрого дампа небольшой базы я использую DataGrip, но вот для этого дела он как раз и использует psql, ставить PostgreSQL мне не сильно хотелось, как и лезть на сервер поэтому был нагуглен пакет libpq.

Установка простая — через brew


brew install libpq


И далее прописываем путь к бинарнику psql /usr/local/Cellar/libpq/11.5_1/bin/pg_dump (осторожно, версия может меняться)

link

 Нет комментариев    811   7 мес   macOS   PostgreSQL   psql

Kubernetes: Postgresql открыть порт на NGINX-Ingress


apiVersion: v1
kind: Service
metadata:
  labels:
    app: postgres-container
    tier: backend
  name: postgres
spec:
  ports:
  - port: 5432
    protocol: TCP
  selector:
    app: postgres
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tutorial
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my_kube.info
    http:
      paths:
      - path: /
        backend:
          serviceName: postgres-container
          servicePort: 5432


https://stackoverflow.com/a/50197893

 Нет комментариев    271   9 мес   Kubernetes   nginx   nginx-ingress   PostgreSQL

PostgreSQL: Изменить владельца таблиц в БД

После разворачивания дампа БД от другого пользователя, потребовалось скорректировать права на таблицы в БД. Быстрый поиск выдал статейку от утилты TablePlus. Отработало идеально, поэтому забираю к себе в заметки, вдруг еше понадобится.

Tables:


for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" bdname` ; do  psql -c "alter table \"$tbl\" OWNER to NEWOWNER" DBNAME ; done


Sequences:


for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" dbname` ; do  psql -c "alter table \"$tbl\" OWNER to NEWOWNER" DBNAME ; done


Views:


for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" dbname` ; do  psql -c "alter table \"$tbl\" OWNER to NEWOWNER" DBNAME ; done


DBNAME — имя БД
OWNER — текущий владелец таблиц в БД
NEWOWNER — новый владелец таблиц в БД

Источник

 Нет комментариев    311   10 мес   bash   database   owner   PostgreSQL   tables

Создание пользователя PostgreSQL с правами Read Only

Создание пользователя PostgreSQL с правами Read Only

Для доступа к одной из баз данных, потребовалось создать пользователя с правами readonly, решение для PostgreSQL 9.6+ было найдено на stackoverflow


CREATE USER Read_Only_User  WITH ENCRYPTED PASSWORD 'STRONG_PASSWORD';
GRANT USAGE ON SCHEMA public to Read_Only_User;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO Read_Only_User;

GRANT CONNECT ON DATABASE DATABASE_TO_READ to Read_Only_User;

\c DATABASE_TO_READ

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO Read_Only_User;
GRANT USAGE ON SCHEMA public to Read_Only_User; 
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User;


DATABASE_TO_READ — база данных, куда нужно дать доступ на чтение
Read_Only_User — пользователь используемый для доступа
STRONG_PASSWORD — пароль пользователя Read_Only_User
Источник

 Нет комментариев    295   11 мес   PostgreSQL   SQL

ERROR: database «database» is being accessed by other users

postgresql-1.jpg ERROR: database «database» is being accessed by other users

При удалении БД в PostgreSQL, если открыто соединение — будем получать следующую ошибку:


postgres=# drop database database;
ERROR:  database "database" is being accessed by other users
DETAIL:  There is 1 other session using the database.


Чтобы удалить БД завершаем соединение (вариант попробовать перезапустить сервер, если можно, да и у меня даже после этого БД не отпустило) с помощью запроса ниже от суперпользователя и дропаем БД


SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;


где database_name имя БД

 Нет комментариев    290   1 год   database   drop   Error   PostgreSQL   SQL
Ранее Ctrl + ↓