Identity column data type difference in PostgreSQL and Oracle

Started by Muhammad Ikramalmost 2 years ago3 messagesgeneral
Jump to latest
#1Muhammad Ikram
mmikram@gmail.com

Hello,

Tables which have an identity column in Oracle when migrated to PostgreSQL,
the data type of Identity column is changed to bigint from number by the
tools. This causes the size of column to be reduced to max value supported
by bigint which is way lower than the oracle number max.
Secondly one has to change referencing columns data type as well.

What should be a better strategy for such transformations ?

Sample tables

CREATE TABLE Sales (
*transaction_id* NUMBER GENERATED ALWAYS AS IDENTITY MINVALUE 1
MAXVALUE <maxvaluefornumberdatatype> INCREMENT BY 1 START WITH 1 NOCYCLE
customer VARCHAR2(100),
transaction_date DATE,
store_id NUMBER
);

CREATE TABLE Sales_Details (
*transaction_id* NUMBER,
item VARCHAR2(100),
quantity NUMBER,
price NUMBER,
CONSTRAINT fk_transaction_id FOREIGN KEY (transaction_id) REFERENCES
Sales(transaction_id)
);

--
Regards,
Muhammad Ikram

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Muhammad Ikram (#1)
Re: Identity column data type difference in PostgreSQL and Oracle

On 03.05.24 12:57, Muhammad Ikram wrote:

Tables which have an identity column in Oracle when migrated to
PostgreSQL, the data type of Identity column is changed to bigint from
number by the tools. This causes the size of column to be reduced to max
value supported by bigint which is way lower than the oracle  number max.

Sequences in PostgreSQL are limited to bigint, there is nothing that can
be changed about that. But you are approximately the first person to
complain that the range of ids provided by bigint is too small, so maybe
it's worth reconsidering whether it would work for you. If it really is
too small, maybe a uuid would work. But yes, you'll need to make some
adjustments to the rest of your database or application code if you make
such changes.

#3Muhammad Ikram
mmikram@gmail.com
In reply to: Peter Eisentraut (#2)
Re: Identity column data type difference in PostgreSQL and Oracle

Thanks for the advice.

On Fri, 3 May 2024 at 16:09, Peter Eisentraut <peter@eisentraut.org> wrote:

Show quoted text

On 03.05.24 12:57, Muhammad Ikram wrote:

Tables which have an identity column in Oracle when migrated to
PostgreSQL, the data type of Identity column is changed to bigint from
number by the tools. This causes the size of column to be reduced to max
value supported by bigint which is way lower than the oracle number max.

Sequences in PostgreSQL are limited to bigint, there is nothing that can
be changed about that. But you are approximately the first person to
complain that the range of ids provided by bigint is too small, so maybe
it's worth reconsidering whether it would work for you. If it really is
too small, maybe a uuid would work. But yes, you'll need to make some
adjustments to the rest of your database or application code if you make
such changes.