2

I am trying to create Postgres table with Bigserial data type as a promary key. Once I am creating the table the table definition is getting changed to bigint NOT NULL DEFAULT nextval('transactions.transaction_id_seq'::regclass), to this. Please let me know why this happenning?

Thanks In Advance, Somnath

1

1 Answer 1

9

As noted in the documentation, serials are not "real" data types, but rather convenience wrappers. If you create a serial column, you automatically get

  • a new sequence ('tablename_columnname_seq`)
  • an integer column of the appropriate type that takes its default value from the sequence.
  • the setup for the column to use the sequence.

To quote:

The data types smallserial, serial and bigserial are not true types, but merely a notational convenience for creating unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases).

CREATE TABLE table (BIGSERIAL id PRIMARY KEY);

is the same as

CREATE SEQUENCE table_id_seq;
CREATE TABLE table (
   id bigint NOT NULL DEFAULT nextval('table_id_seq')
);
ALTER SEQUENCE table_id_seq OWNED BY table.id;

Which matches what you are getting.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.