Postgres: использовать ли oid или байтовый массив - PullRequest
2 голосов
/ 26 августа 2011

Я работаю над проектом, в котором есть несколько схем в базе данных postgres. Иногда мне приходится перемещать схемы из одной базы данных в другую. В моей структуре данных я использую множество столбцов oid, которые вызывают проблемы во время перемещения из-за столкновения oid с существующим oid в новой базе данных, в которую перемещается схема.

Я использую следующие команды для резервного копирования и восстановления схемы

pg_dump -f <file> -F t -o --blobs -n <schema> <database>

pg_restore -d <database> -F t -v <file>

Все мои файлы имеют размер менее 100 МБ, большинство из них будет размером в несколько КБ, поэтому я думаю об использовании bytea типа данных вместо oid.

Это хороший ход или плохой?

Согласно документации, если размер файла очень большой, рекомендуется использовать oid, но в моем случае файлы будут небольшими.

Есть ли какое-либо влияние на производительность, если я использую bytea вместо oid, как индексирование / поиск?

1 Ответ

1 голос
/ 26 августа 2011

Причина, по которой вы не используете oid (или serial) для подобных ситуаций, заключается в том, что они увеличиваются последовательно, поэтому неудивительно, что у вас есть конфликты.

Я не уверен на 100%, но читаяДокументы, похоже, что bytea реализован аналогично varchar с точки зрения дискового пространства, поэтому размер индекса, скорость поиска и требования к хранилищу будут одинаковыми.То есть, он займет больше места и будет медленнее, чем при использовании целых или длинных значений.Но насколько медленнее и если это важно для вашего варианта использования, я не уверен.

Почему бы не попробовать целое (или длинное), а сначала использовать случайное значение вместо последовательного?Если это не сработает, я бы порекомендовал встроенный тип uuid, а не пытаться заполнить байтовый массив вашими сгенерированными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...