Как автоматически генерировать Oids в версиях postgres более 12

В настоящее время я нахожусь в процессе переноса базы данных моей команды с postgres 10 на postgres 13. Моя команда разрабатывает приложение на основе Java, построенное на postgres, поэтому мы не хотим переносить базу данных, а просто редактируем код так, чтобы наша программа совместим с postgres 13. Есть ли какая-нибудь команда для автоматической генерации oids? Вот наш текущий код, который совместим с postgres 10, но не с 13.

        String createTable = "CREATE TABLE IF NOT EXISTS tableorders (" +
                "tablename    TEXT NOT NULL," +
                "ordername TEXT NOT NULL," +
                "rowIdxTable TEXT, " +
                "colIdxTable TEXT, " +
                "PRIMARY KEY (tablename, ordername)" +
                "UNIQUE (oid))" +
        //postgres13 does not support this line
                "WITH oids";
                ") ";

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


person Nathan Zhang    schedule 14.10.2020    source источник
comment
OID устарели уже почти 15 лет, зачем вообще их использовать? Но почему бы просто не использовать вместо этого столбец IDENTITY (или серийный номер)?   -  person a_horse_with_no_name    schedule 14.10.2020


Ответы (1)


Вы должны использовать столбец идентификаторов типа bigint с именем oid, и ваша программа продолжит работать, как раньше.

Если вам нужна уникальность для всей базы данных, это то, чего недавно удаленные oid не обеспечивали не. Эти числа были взяты из 4-байтового беззнакового счетчика, который зацикливался после 2^32 (хотя PostgreSQL избегал повторяющихся чисел в одной таблице, если столбец имел уникальный индекс).

Уникальность столбца oid во всей базе данных может быть легко достигнута путем использования одной последовательности для предоставления значений для всех таких столбцов.

person Laurenz Albe    schedule 14.10.2020