#postgresql #storage #database-administration
#postgresql #Хранение #администрирование базы данных
Вопрос:
Я запускаю запрос, который дублирует очень большую таблицу (92 миллиона строк) в PostgreSQL. После 3 итераций я получил это сообщение об ошибке:
Запрос был:
CREATE TABLE table_name
AS SELECT * FROM big_table
Проблема не связана с нехваткой места в кластере базы данных: при 0,3% от максимально возможного объема памяти на момент выполнения запроса размер таблицы составляет около 0,01% от максимального объема памяти, включая все реплики. Я также проверил временные файлы, и это не так.
Комментарии:
1. Я видел это только в связи с нехваткой места на диске. Вы уверены, что смотрите на правильный раздел?
2. Разрешено ли вашей базе данных расширяться до определенного размера? Возможно, он достиг этого размера? То же самое для temp_db.
3. Добро пожаловать в SO, очень хорошо заданный вопрос. Не могли бы вы добавить ошибку в виде текста вместо ссылки на скриншот. Это экономит время (многие люди сканируют Qs очень быстро). Спасибо.
Ответ №1:
У вас определенно заканчиваются ресурсы файловой системы.
Убедитесь, что вы правильно определили размер:
SELECT pg_table_size('big_table');
Не забывайте, что файлы, поддерживающие новую таблицу, удаляются после ошибки, поэтому неудивительно, что у вас много свободного места после сбоя инструкции.
Одна из возможностей заключается в том, что у вас заканчивается не дисковое пространство, а свободные i-узлы. Способ проверки свободных ресурсов отличается от файловой системы к файловой системе; для ext4 в Linux это было бы
sudo dumpe2fs -h /dev/... | grep Free