KeyEvent.ACTION_UP сработал ДВАЖДЫ для ACTION_MEDIA_BUTTON

В PostgreSQL в настоящее время нет функций для непосредственного отображения дискового пространства.

С одной стороны, какой диск? Производственный экземпляр PostgreSQL часто выглядит так:

  • /pg/pg94/: RAID6 с быстрым надежным хранением на RAID-контроллере BBU в режиме WB, для каталогов и наиболее важных данных
  • /pg/pg94/pg_xlog: быстрый надежный RAID1 для журналов транзакций
  • /pg/tablespace-lowredundancy: RAID10 быстрого дешевого хранилища для таких вещей, как индексы и таблицы UNLOGGED, которые вам не нужны, чтобы потерять вы можете использовать хранилище с более низким избыточным хранением
  • /pg/tablespace-bulkdata: RAID6 или аналогичный медленный магнитный носитель с близким расстоянием, используемый для старых журналов аудита, исторических данных, данных с записью в основном и других вещей, которые могут быть медленнее для доступа.
  • Журналы postgreSQL обычно находятся где-то в другом месте, но если это заполняется, система все равно может остановиться. Где зависит несколько настроек конфигурации, некоторые из которых вы вообще не видите из PostgreSQL, например параметры syslog.

Тогда есть факт, что «свободное» пространство необязательно означает, что PostgreSQL может использовать его (думаю: дисковые квоты, системно-зарезервированное дисковое пространство) и тот факт, что свободные блоки / байты не являются единственным ограничением, так как много файлов системы также имеют ограничения на количество файлов (inodes).

Как сообщает SELECT pg_get_free_disk_space() об этом?

Знание свободного места на диске может быть проблемой безопасности. Если это поддерживается, это то, что было бы доступно только для суперпользователя.

Что вы можете делать, это использовать ненадежный процедурный язык, например plpythonu, чтобы сделать операционную систему вызовы для опроса операционной системы хоста для информации о дисковой памяти, используя запросы против pg_catalog.pg_tablespace и использование параметра data_directory из pg_settings, чтобы обнаружить, где PostgreSQL хранит информацию в ОС хоста. Вы также должны проверить точки монтирования (unix / Mac) / точки соединения (Windows), чтобы узнать, находятся ли pg_xlog и т. Д. На отдельном хранилище. Это все равно не поможет вам с пространством для журналов.

Мне бы очень хотелось иметь SELECT * FROM pg_get_free_diskspace, который сообщил о главном пространстве datadir, и о любых точках подключения или точках соединения в нем, например для pg_xlog или pg_clog, а также сообщается каждое табличное пространство и любые точки монтирования внутри него. Это будет функция, возвращающая набор. Тем не менее, кто-то, кто заботится об этом, должен был бы попытаться реализовать его для всех целевых платформ , хотя сейчас и никто не хочет, чтобы это делало достаточно.


В среднем Если вы хотите упростить свои потребности:

  • Одна файловая система
  • Целевая ОС - совместимая с UNIX / POSIX, например Linux
  • Нет никакой системы квот
  • Нет процентного содержания в корневом зарезервированном блоке
  • Исходное значение inode не вызывает беспокойства

, тогда вы можете CREATE LANGUAGE plpython3u; и CREATE FUNCTION a LANGUAGE plpython3u, которая делает что-то вроде:

import os
st = os.statvfs(datadir_path)
return st.f_bavail * st.f_frsize

в функции, которая returns bigint и либо принимает datadir_path в качестве аргумента, либо обнаруживает ее, выполняя запрос SPI, например SELECT setting FROM pg_settings WHERE name = 'data_directory' из PL / Python.

Если вы хотите также поддерживать Windows, см. Кросс-платформенное пространство, оставшееся на томе, с помощью python . Я бы использовал запросы Windows Management Interface (WMI), а не использовать ctypes для вызова Windows API.

Или вы могли бы использовать эту функцию, которую кто-то написал в PL / Perlu , чтобы сделать он использует синтаксический вывод команды df и mount, который, вероятно, будет работать только в Linux, но, к сожалению, он написан заранее.

20
задан Community 23 May 2017 в 12:14
поделиться