2015-08-19 3 views
0

Недавно я получил could not read block ошибку, отображая следующее сообщение:Где подъязычная в сообщении об ошибке pg_tblspc

pg_tblspc/16010/PG_9.3_201306121/16301/689225.365 

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

select oid,relname from pg_class where oid=16010 or oid=16301; 

Теперь мой вопрос, какие цифры на этой pg_tablspc? Я прошел через link, и я считаю, что, возможно, я тоже пропустил главный пункт!

ответ

1

Update: много более подробная рецензия на http://blog.2ndquadrant.com/postgresql-filename-to-table/

Следующая информация не учитывает изменения relfilenode из-за вакуумной полной и т.д.


В:

pg_tblspc/16010/PG_9.3_201306121/16301/689225.365 

у нас есть:

  • pg_tblspc: Указывает, что это соотношение в табличном, кроме значения по умолчанию или глобальных табличными
  • 16010: табличного OID из pg_tablespace.oid,
  • PG_9.3_201306121: версия конкретного, catversion конкретной строки, чтобы различные версии Pg сосуществовать в табличном
  • 16301: базы данных OID из pg_database.oid
  • 689225: соотношение OID от pg_class.oid
  • 365: Номер сегмента. PostgreSQL разбивает большие таблицы на экстенты (сегменты) по 1 ГБ каждый.

Также может быть номер вилки, но на этом пути нет ни одного.


Для меня было справедливо копаться в исходном коде, чтобы быть уверенным в этом. Макрос, который вы хотите, это relpathbackend в src/include/common/relpath.h, для всех, кто ищет, и он вызывает GetRelationPath в src/common/relpath.c.

+0

Никогда не думал о копании исходного кода. Спасибо за вашу помощь и полный ответ. Это будет для меня. –

+0

Я думаю, мы должны, вероятно, документировать его, так как он виден в тех ошибках, которые может видеть пользователь. OTOH, это не должно произойти, если что-то не сломано. –

Смежные вопросы