    constraint. Don't worry about the ``DEFERRABLE`` parts; it's telling
    PostgreSQL to not enforce the foreign key until the end of the transaction.
  
  * It's tailored to the database you're using, so database-specific field types
    such as ``auto_increment`` (MySQL), ``serial`` (PostgreSQL), or ``integer
    primary key autoincrement`` (SQLite) are handled for you automatically. Same
    goes for the quoting of field names -- e.g., using double quotes or
    single quotes.
  
  * The :djadmin:`sqlmigrate` command doesn't actually run the migration on your
    database - instead, it prints it to the screen so that you can see what SQL
    Django thinks is required. It's useful for checking what Django is going to
    do or if you have database administrators who require SQL scripts for
 
</s> remove Django uses PostgreSQL's `SERIAL data type`_ to store auto-incrementing primary
keys. A ``SERIAL`` column is populated with values from a `sequence`_ that
keeps track of the next available value. Manually assigning a value to an
 </s> add Django uses PostgreSQL's identity columns to store auto-incrementing primary
keys. An identity column is populated with values from a `sequence`_ that keeps
track of the next available value. Manually assigning a value to an </s> remove         "id" serial NOT NULL PRIMARY KEY,
 </s> add         "id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, </s> remove         "id" serial NOT NULL PRIMARY KEY,
 </s> add         "id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, </s> remove         "id" bigserial NOT NULL PRIMARY KEY,
 </s> add         "id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, </s> remove         "id" serial NOT NULL PRIMARY KEY,
 </s> add         "id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  such as ``auto_increment`` (MySQL), ``bigint PRIMARY KEY GENERATED BY DEFAULT
  AS IDENTITY`` (PostgreSQL), or ``integer primary key autoincrement`` (SQLite)
  are handled for you automatically. Same goes for the quoting of field names
  -- e.g., using double quotes or single quotes.
    constraint. Don't worry about the ``DEFERRABLE`` parts; it's telling
    PostgreSQL to not enforce the foreign key until the end of the transaction.
  
  * It's tailored to the database you're using, so database-specific field types
  such as ``auto_increment`` (MySQL), ``bigint PRIMARY KEY GENERATED BY DEFAULT
  AS IDENTITY`` (PostgreSQL), or ``integer primary key autoincrement`` (SQLite)
  are handled for you automatically. Same goes for the quoting of field names
  -- e.g., using double quotes or single quotes.
  such as ``auto_increment`` (MySQL), ``bigint PRIMARY KEY GENERATED BY DEFAULT
  AS IDENTITY`` (PostgreSQL), or ``integer primary key autoincrement`` (SQLite)
  are handled for you automatically. Same goes for the quoting of field names
  -- e.g., using double quotes or single quotes.
  such as ``auto_increment`` (MySQL), ``bigint PRIMARY KEY GENERATED BY DEFAULT
  AS IDENTITY`` (PostgreSQL), or ``integer primary key autoincrement`` (SQLite)
  are handled for you automatically. Same goes for the quoting of field names
  -- e.g., using double quotes or single quotes.
  such as ``auto_increment`` (MySQL), ``bigint PRIMARY KEY GENERATED BY DEFAULT
  AS IDENTITY`` (PostgreSQL), or ``integer primary key autoincrement`` (SQLite)
  are handled for you automatically. Same goes for the quoting of field names
  -- e.g., using double quotes or single quotes.
  
  * The :djadmin:`sqlmigrate` command doesn't actually run the migration on your
    database - instead, it prints it to the screen so that you can see what SQL
    Django thinks is required. It's useful for checking what Django is going to
    do or if you have database administrators who require SQL scripts for
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Refs #30511 -- Updated docs about auto-incrementing primary keys on PostgreSQL.

Follow up to 2eea361eff58dd98c409c5227064b901f41bd0d6. 
docs/intro/tutorial02.txt