PostgreSQL, Qt, Базы данных

Путь к каталогу bin PostgreSQL Windows

Задача: получить значение пути к каталогу бинарников сервера — к каталогу bin. Путь к каталогу data, как и прочие значения параметров времени выполнения, найти совершенно несложно: достаточно выполнить запрос show, воспользоваться функцией current_setting() или обратиться к представлению pg_settings:

[pastacode lang=»sql» manual=»show%20data_directory%3B%0Aselect%20current_setting(‘data_directory’)%3B%0Aselect%20setting%20from%20pg_settings%20%0A%20%20%20where%20name%20%3D%20’data_directory’%3B» message=»Три равнозначных примера получения значения пути к каталогу data» highlight=»» provider=»manual»/]

Еще парочку примеров показывала вот в этой записи: Количество подключений к БД PostgreSQL.

С значением пути к каталогу bin не все так просто — запросом его не получишь. Но можно узнать из реестра. В реестре не хранится чистый ключ со значением пути к каталогу, к сожалению, но можно узнать путь к исполняемому файлу службы сервера.

Итак, интересующий нас ключ: Продолжить чтение «Путь к каталогу bin PostgreSQL Windows»

"Нет" выгоранию, C++, PostgreSQL, Qt, Мысли вслух

Незамеченные записи 2019 года

Начнем еще одну традицию — заведем тему о скромных темах. Стоят там в сторонке, никто на них не смотрит 🙂

  1. «Нет» выгоранию: прогулки на свежем воздухе
  2. Волшебство в обычном месте
  3. Мини-путешествие к Браславским озёрам
  4. Jobs trace: Учет потраченного на проекты времени
  5. Няня вместо мамы для больничных детей
  6. Qt: Добавить свой виджет на форму
  7. DBRecordWidget — Библиотека-виджет для работы с данными (Qt)
  8. Вывод даты с указанием часового и минутного смещения timezone в PostgreSQL
  9. Количество подключений к БД PostgreSQL
  10. Изменить цвет фона и текста ячейки или строки QTableView
Microsoft SQL Server, PostgreSQL, Qt, SQL, Базы данных

Лучшие записи 2019 года

Продолжим традицию: ниже темы, имеющие наилучшую статистику посещений за 2019 год. Пост за прошлый год: Лучшие записи за 2018 год

  1. Основы баз данных. ER-модель (сущность-связь)
  2. Добавление данных в таблицу QTableWidget. Очистка таблицы
  3. Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server
  4. PostgreSQL: unnest(array)
  5. PostgreSQL: Размер таблиц и базы данных
  6. PostgreSQL: Узнать данные о колонках таблицы
  7. Получить значения полей выделенной строки QTableView
  8. Qt. Динамическое создание виджетов на форме
  9. Триггеры в PostgreSQL
  10. Подключение к базе данных в Qt
PostgreSQL

Количество подключений к БД PostgreSQL

Чтобы узнать количество подключений к той или иной базе, воспользуйтесь запросом

select count(datid) from pg_stat_activity
where datname = 'table_name'

Представление pg_stat_activity очень интересное: можно узнать последний выполненный запрос клиента, его IP, состояние и много чего другого, о чем можно прочитать в документации.

Чтобы узнать максимально возможное количество подключений, выполните запрос:

show max_connections

А чтобы изменить это значение, придется прогуляться в файл конфигурации. Чтобы точно узнать его путь «лежки», можно выполнить нехитрый запрос:

show config_file

А какие именно манипуляции с файлом производить, неплохо написано вот тут.

О том, как узнать размер таблиц и баз данных, можно ознакомиться в сообщении PostgreSQL: Размер таблиц и базы данных

PostgreSQL, SQL, Базы данных

Что быстрее: where или join?

Начнем с того, что, грубо говоря, «where» и «join» — не то же самое. Предложение where накладывает на выборку некое условие, а join — объединяет данные некоторых таблиц по некоторым условиям. Но если свести задачу к выводу данных из двух (или более) таблиц по условию, то результат будет в обоих случаях окажется идентичным. Сегодня хотелось бы выяснить, какую конструкцию использовать оптимальнее в данном случае.

Для теста буду использовать все те же таблицы из записи Оптимизация запросов PostgreSQL с explain analyze. В таблицу phonebook добавим новое поле phone_number (номер телефона): Продолжить чтение «Что быстрее: where или join?»

PostgreSQL, SQL, Базы данных

Оптимизация запросов PostgreSQL с explain analyze

Один недавний занимательный разговор на тему SQL вообще и оптимизации запросов — в частности, натолкнул меня на исследование быстродействия выполнения некоторого типа запросов. Потому что я не была уверена в этом вопросе. И мне это не понравилось 🙂 Специально для такого дела создала БД с 3 таблицами. В этом посте буду использовать только 2 из них, возможно, 3-ю задействую в других тестах. Для работы воспользуемся командой explain analyze.

Первая таблица cities содержит минимальную информацию о некоторых городах. Таблица people — о некоторых людях. И таблица phonebook хранит данные телефонного справочника. PostgreSQL 10. Продолжить чтение «Оптимизация запросов PostgreSQL с explain analyze»

PostgreSQL

PostgreSQL: Размер таблиц и базы данных

Чтоб узнать размер всех таблиц схемы базы данных достаточно выполнить вот такой запрос:

select table_name, pg_size_pretty( pg_total_relation_size(table_name)) 
from information_schema.tables 
where table_schema = 'table_schema_name' and
table_catalog = 'database_name';

Этот запрос вернет полный размер таблицы, включая индексы и данные TOAST. Чтоб узнать размер таблицы без индексов ( но включая TOAST, карту свободного места и карту видимости ) воспользуйтесь функцией pg_table_size. pg_relation_size() — чтоб узнать объём, который занимает на диске указанный слой (‘main’, ‘fsm’, ‘vm’, ‘init’) заданной таблицы или индекса. Про некоторые другие функции получения размера объектов можно почитать в документации.

Узнать размер баз данных на сервере:

select datname, pg_size_pretty(pg_database_size(datname)) 
from pg_database;

pg_size_pretty возвращает значение размера объектов в удобочитаемом для человека виде, например 36 MB. Однако можно использовать выше указанные функции напрямую. Тогда размер объектов вернется в байтах.

Qt, SQL, Базы данных, Портфолио

Лучшие записи за 2018 год

Без лишних слов. Вот топ 10 записей 2018 года:

  1. Добавление данных в таблицу QTableWidget. Очистка таблицы
  2. Qt. Динамическое создание виджетов на форме
  3. Подключение к базе данных в Qt
  4. Основы баз данных. ER-модель (сущность-связь)
  5. АС «Складской учет». C++ Builder + MySQL
  6. Получить значения полей выделенной строки QTableView
  7. Отображение данных выборки в виджете QTableView
  8. Значения ячеек выделенных строк QTableView
  9. Контекстное меню в Qt. Popup Menu
  10. Кнопки QMessageBox на русском языке
PostgreSQL, Qt

PostgreSQL: unnest(array)

Моя любимая функция PostgreSQL — unnest (ссылка на документацию)! Она такая простая, но такая классная 😀

Она очень пригодится, если нужно вставить сразу несколько записей за один присест. Допустим, у одной фирмы есть несколько номеров телефонов и, чтобы не перечислять вставку этих данных через запятую, дублируя id фирмы, можно использовать unnest — элегантное решение! Продолжить чтение «PostgreSQL: unnest(array)»

Microsoft SQL Server, PostgreSQL, SQL

PostgreSQL и MSSQLServer: Ограничение количества отображаемых строк выборки

Вывести первые 100 строк запроса:

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%0Aorder%20by%20id%0Alimit%20100″ message=»PostgreSQL limit» highlight=»3″ provider=»manual»/]

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%20%0Afetch%20next%20100%20rows%20only» message=»PostgreSQL fetch» highlight=»2″ provider=»manual»/]

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%0Aorder%20by%20id%0Aoffset%200%20rows%20fetch%20next%20100%20rows%20only» message=»Microsoft SQL Server offset…fetch» highlight=»3″ provider=»manual»/]

Вывести 100 строк выборки, пропустив 20 строк:

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%0Aorder%20by%20id%0Alimit%20100%20offset%2020″ message=»PostgreSQL limit…offset» highlight=»3″ provider=»manual»/]

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%20%0Aoffset%2020%20rows%20fetch%20next%20100%20rows%20only» message=»PostgreSQL offset…fetch» highlight=»2″ provider=»manual»/]

[pastacode lang=»sql» manual=»select%20*%20from%20table_name%0Aorder%20by%20id%0Aoffset%2020%20rows%20fetch%20next%20100%20rows%20only» message=»Microsoft SQL Server offset…fetch» highlight=»3″ provider=»manual»/]

Стоит отметить, что для использования предложения OFFSET и FETCH в MSSQLServer требуется ORDER BY. В PostgreSQL — нет. В MS SQL Server использование offset без fetch запрещено. В PostgreSQL — нет.

Для ограничения количества выводимых строк без сдвига для Microsoft SQL Server можно воспользоваться оператором top:

[pastacode lang=»sql» manual=»select%20top%20100%20*%0Afrom%20table_name%0Aorder%20by%20id» message=»Microsoft SQL Server top» highlight=»1″ provider=»manual»/]

Документация: PostgreSQL, MSSQLServer (offset…fetch, top).