Я смотрю на создание таблиц в PostgreSQL и наткнулся на это:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
Я прочитал документацию, предоставленную postgres, и я знаю концепцию идентификатора объекта из ООП, но все же я не понимаю,
- почему такой идентификатор будет полезен в базе данных?
- сделать запросы короче?
- когда его следует использовать?
sql
database
performance
postgresql
fabrizioM
источник
источник
old
системного столбца .Ответы:
OID в основном предоставляют встроенный глобально уникальный идентификатор для каждой строки, содержащейся в системном столбце (в отличие от столбца пользовательского пространства). Это удобно для таблиц, в которых у вас нет первичного ключа, есть повторяющиеся строки и т. Д. Например, если у вас есть таблица с двумя одинаковыми строками и вы хотите удалить самую старую из двух, вы можете сделать это, используя колонка oid.
По моему опыту, эта функция, как правило, не используется в большинстве приложений с постгресовой поддержкой (вероятно, частично потому, что они нестандартны), и их использование по существу не рекомендуется :
источник
OID все еще используются для Postgres с большими объектами (хотя некоторые люди утверждают, что большие объекты в общем случае бесполезны). Они также широко используются системными таблицами . Они используются, например, TOAST, который хранит BYTEA размером более 8 КБ (и т. Д.) В отдельной области хранения (прозрачно), которая используется по умолчанию во всех таблицах . Их прямое использование, связанное с «обычными» пользовательскими таблицами, в основном не рекомендуется .
Очевидно, последовательность OID «оборачивается», если она превышает 4B 6 . Так что по сути это глобальный счетчик, который может обернуться Если это произойдет, может произойти некоторое замедление, когда он будет использован и "найден" для поиска уникальных значений и т. Д.
Смотрите также https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F.
источник
OIDs постепенно сокращаются
Основная команда, ответственная за Postgres, постепенно сворачивает OID.
Postgres 12 удаляет специальное поведение столбцов OID
Использование OID в качестве необязательного системного столбца в ваших таблицах теперь удалено из Postgres 12. Вы больше не можете использовать:
CREATE TABLE … WITH OIDS
командаdefault_with_oids (boolean)
настройка совместимостиТип данных
OID
остается в Postgres 12. Вы можете явно создать столбец типаOID
.После перехода на Postgres 12 любой необязательный системный столбец
oid
больше не будет невидимым по умолчанию. ВыполнениеSELECT *
теперь будет включать этот столбец. Обратите внимание, что этот дополнительный «неожиданный» столбец может нарушить наивно написанный код SQL.источник
Чтобы удалить все OID из таблиц базы данных, вы можете использовать этот скрипт Linux:
Сначала войдите как суперпользователь PostgreSQL:
Теперь запустите этот скрипт, заменив YOUR_DATABASE_NAME именем вашей базы данных:
Я использовал этот скрипт, чтобы удалить все мои OID, так как Npgsql 3.0 не работает с этим, и он больше не важен для PostgreSQL.
источник