Category Archive: PostgreSQL

PostgreSQL размер таблиц и индексов

Надыбал такой запрос, который вытягивает размеры таблиц и их индексов, а также суммарный размер:
SELECT
    TABLE_NAME,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        TABLE_NAME,
        pg_table_size(TABLE_NAME) AS table_size,
        pg_indexes_size(TABLE_NAME) AS indexes_size,
        pg_total_relation_size(TABLE_NAME) AS total_size
    FROM (
        SELECT ('"' || table_schema || '"."' || TABLE_NAME || '"') AS TABLE_NAME
        FROM information_schema.tables
    ) AS all_tables
    ORDER BY total_size DESC
) AS pretty_sizes

Просмотр привилегий пользователей к таблицам

Сегодня возникла необходимость просмотреть права доступа всех пользователей. Быстрого и подходящего решения не получилось найти. В итоге нашел пример запроса выводящего привилегии для одной таблицы, а дальше соединил этот запрос с запросом всех таблиц. В итоге получился следующий запрос.
SELECT rtg.grantee, rtg.privilege_type, t.table_name 
FROM information_schema.tables t
JOIN information_schema.role_table_grants rtg ON t.table_name = rtg.table_name
ORDER BY rtg.grantee
Результат запроса содержит логин пользователя, тип привилегии и название таблицы:

Установка PostgreSQL из исходников на Ubuntu 16.04

Склонируйте репозиторий PostgreSQL
git clone https://github.com/postgres/postgres.git
После окончания загрузки файлов перейдите в созданную директорию
cd postgres
Переключитесь на ветку REL_10_STABLE
git checkout REL_10_STABLE
Перед непосредственно сборкой проект нужно установить вспомогательно ПО.
sudo apt-get install libreadline-dev
sudo apt-get install bison
sudo apt-get install flex
Сконфигурируйте проект
./configure
Соберите проект
make
Установить postgres
sudo make install
Переключитесь в режим супер-пользователя:
sudo su
Добавьте нового пользователя postgres:
adduser postgres
Задайте пароль для пользователя postgres:
passwd postgres
Создайте директорию для данных postgres:
mkdir /usr/local/pgsql/data
Поменяйте владельца и группу для директории:
chown postgres:postgres /usr/local/pgsql/data
Далее поменяйте пользователя на postgres:
su - postgres
Проинициализируйте новый кластер баз данных:
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/

Target lists can have at most 1664 entries в PostgreSQL

Давно не писал... На прошлой неделе поймал такую ошибку:
ERROR: target lists can have at most 1664 entries
Данная ошибка возникла из-за того, что появилось много зависимостей между сущностями(Entity). Когда идет запрос данных через Hibernate, то JOIN'ится много таблиц, и общее количество получаемых полей начинает превышать 1664. В нашем случае это было около 1700 полей. Такое разумное ограничение есть у PostgreSQL. Решить можно такими путями: 1) Переписать запросы, взяв только используемые поля; 2) Сделать некоторые поля Lazy. Скорее всего, такая проблема и у вас решится вторым путем.