Вы здесь

Шпаргалка для PostgreSQL

SELECT
       oid::regclass::text AS table,
       age(relfrozenxid) AS xid_age,
       mxid_age(relminmxid) AS mxid_age,
       least(
(SELECT setting::int
            FROM    pg_settings
            WHERE   name = 'autovacuum_freeze_max_age') - age(relfrozenxid),
(SELECT setting::int
            FROM    pg_settings
            WHERE   name = 'autovacuum_multixact_freeze_max_age') - mxid_age(relminmxid) 
) AS tx_before_wraparound_vacuum,
pg_size_pretty(pg_total_relation_size(oid)) AS size,
pg_stat_get_last_autovacuum_time(oid) AS last_autovacuum
FROM    pg_class
WHERE   relfrozenxid != 0
ORDER BY tx_before_wraparound_vacuum;

_______________

 

 

2
3
4
5
6
7
8
9
10
SELECT
    relname AS name,
    relfilenode AS oid,
    (relpages::bigint * 8192 / (1024*1024))::bigint AS size_mb,
    reltuples AS cnt
FROM pg_class
WHERE relname IN (
    SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'
)
ORDER BY cnt DESC;

 

 
SELECT 
schemaname||'.'||tablename AS full_tname, 
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS total_usage, 
pg_size_pretty((pg_total_relation_size(schemaname||'.'||tablename) - pg_relation_size(schemaname||'.'||tablename))) AS external_table_usage 
FROM pg_catalog.pg_tables 
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
 
 

yum install -y python36u python36u-libs python36u-devel python36u-pip

Вывести настройки сервера PostgreSQL:

SELECT pg_show_all_settings();
SELECT name, source, setting, reset_val, context, category
FROM pg_show_all_settings() WHERE name = 'data_directory';

SHOW

SHOW ALL;
SHOW shared_buffers;
SELECT  name, source, setting, reset_val, context FROM pg_settings;

Изменение настроек СУБД без перезагрузки

SELECT pg_reload_conf();


Узнать размер базы и всех баз кластера

select pg_database_size('base');

select t1.datname AS db_name,         pg_size_pretty(pg_database_size(t1.datname)) as db_size from pg_database t1 order by pg_database_size(t1.datname) desc; 
--------------------------------------------  все привелегии пользователя
 
select * from INFORMATION_SCHEMA.table_privileges
UNION
select * from INFORMATION_SCHEMA.role_table_grants 
 
-- создание новой роли
CREATE ROLE rolename WITH     SUPERUSER    CREATEDB    NOLOGIN;
 
-- добавление права роли
GRANT select ON tblname TO rolename;
 
-- добавление роли пользователю
GRANT rolename TO username;
 
-- удаляем все права на таблицу
-- нельзя уничтожить роль, если она используется
-- для доступа к объекту
 
REVOKE ALL PRIVILEGES ON tblname FROM  rolename;
 
-- уничтожение роли
DROP ROLE IF EXISTS rolename;
 
_________________________________________________________________________________
Доступ к серверу
 
SELECT 
  rolname AS "User", -- название ролей
  CASE WHEN rolsuper OR rolcanlogin 
       THEN 'Yes' ELSE 'No' END AS "Access" -- есть ли право для логина?
FROM 
  pg_roles;
____________________________________________________________________
Доступ к объектам сервера
 
В данном случае будем выбирать объекты типа "база данных", и определять какая "роль" имеет к ним ACL с типом 'CONNECT'. Это можно реализовать следующим запросом:
 
WITH bases AS (
  SELECT
    *
  FROM (
    SELECT
      datname AS "db",
      (aclexplode(datacl)).grantor AS "grantor",
      (aclexplode(datacl)).grantee AS "grantee",
      (aclexplode(datacl)).privilege_type AS "type"
    FROM 
      pg_database
  ) AS Query
  WHERE 
    Query.type = 'CONNECT'
),
roles AS (
  SELECT * FROM pg_roles
)
SELECT
  DISTINCT *
FROM (
  SELECT
    *
  FROM (
    SELECT
      bases.db AS db,
      'grantor '||roles1.rolname AS user
    FROM 
      bases
    LEFT JOIN
      roles AS roles1
      ON bases.grantor = roles1.oid
  ) AS one
  UNION
  SELECT
    *
  FROM (
    SELECT
      bases.db AS db,
      'grantee '||roles2.rolname AS user
    FROM 
      bases
    LEFT JOIN
      roles AS roles2
      ON bases.grantee = roles2.oid
  ) AS two
) AS res
WHERE
  res.user NOTNULL and db not like 'template%'
 
 
 
________________________________________________  индексы
 
 
 
SELECT  schemaname,  tablename,  indexname,  indexdef   FROM   pg_indexes
WHERE    tablename = 'report_tracking_message' AND schemaname = 'public'
 
 

 

2
3
4
5
6
7
8
9
10
SELECT
    relname AS name,
    relfilenode AS oid,
    (relpages::bigint * 8192 / (1024*1024))::bigint AS size_mb,
    reltuples AS cnt
FROM pg_class
WHERE relname IN (
    SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'
)
ORDER BY cnt DESC;

 

2
3
4
5
6
7
8
9
10
SELECT
    relname AS name,
    relfilenode AS oid,
    (relpages::bigint * 8192 / (1024*1024))::bigint AS size_mb,
    reltuples AS cnt
FROM pg_class
WHERE relname IN (
    SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'
)
ORDER BY cnt DESC;

 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
2 + 7 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.