Agregar clave principal a una tabla de PostgreSQL solo si no existe

Shihab Sikder 20 junio 2023
  1. Asignar una clave principal en una tabla existente en PostgreSQL
  2. Agregar clave principal a una tabla de PostgreSQL si no existe
Agregar clave principal a una tabla de PostgreSQL solo si no existe

A veces, podemos crear una tabla sin declarar la clave principal, que es necesaria para crear una relación con otras tablas. Ahora, podemos actualizar la tabla con la consulta alterar y actualizar la clave principal.

Asignar una clave principal en una tabla existente en PostgreSQL

La clave principal es necesaria al crear una relación. Puede haber varias relaciones con una tabla, pero sin una clave principal, no podemos establecer una relación.

Digamos que hemos creado una tabla como la siguiente:

CREATE TABLE Product(
  PRODUCT_ID INT,
  PRODUCT_NAME VARCHAR,
  PRODUCT_PRICE NUMERIC,
  PRODUCT_DESCRIPTION VARCHAR
);

Ahora bien, si queremos ver la configuración de la tabla y los tipos de datos, será así:

postgres=# \d Product
                          Table "public.product"
       Column        |       Type        | Collation | Nullable | Default
---------------------+-------------------+-----------+----------+---------
 product_id          | integer           |           |          |
 product_name        | character varying |           |          |
 product_price       | numeric           |           |          |
 product_description | character varying |           |          |

Ahora, agreguemos la clave principal. Aquí, asignaremos el product_id como clave principal.

Así es como lo haremos:

postgres=# ALTER TABLE Product ADD PRIMARY KEY (PRODUCT_ID);
ALTER TABLE
postgres=# \d Product\
                          Table "public.product"
       Column        |       Type        | Collation | Nullable | Default
---------------------+-------------------+-----------+----------+---------
 product_id          | integer           |           | not null |
 product_name        | character varying |           |          |
 product_price       | numeric           |           |          |
 product_description | character varying |           |          |
Indexes:
    "product_pkey" PRIMARY KEY, btree (product_id)

postgres=#

Aquí puede ver que product_id se asigna como clave principal y no puede ser nulo.

Agregar clave principal a una tabla de PostgreSQL si no existe

El método anterior agrega la clave principal incluso si existe la clave principal. Ahora, verificaremos y agregaremos la clave principal si no existe.

Aquí hay una cosa para notar. Postgres asignará automáticamente una restricción como product_pkey cada vez que agreguemos una clave principal, por lo que debemos verificar si esta restricción existe o no.

Aquí están los pasos:

  1. Suelte la clave principal si existe.
  2. Agregue la clave principal.
ALTER TABLE product DROP CONSTRAINT IF EXISTS product_pkey;
ALTER TABLE product ADD CONSTRAINT product_pkey PRIMARY KEY (PRODUCT_ID);

Aquí está la salida del shell psql:

postgres=# ALTER TABLE product DROP CONSTRAINT IF EXISTS product_pkey;
NOTICE:  constraint "product_pkey" of relation "product" does not exist, skipping
ALTER TABLE
postgres=# ALTER TABLE product ADD CONSTRAINT product_pkey PRIMARY KEY (PRODUCT_ID);
ALTER TABLE
postgres=# \d Product
                          Table "public.product"
       Column        |       Type        | Collation | Nullable
---------------------+-------------------+-----------+----------
 product_id          | integer           |           | not null
 product_name        | character varying |           |
 product_price       | numeric           |           |
 product_description | character varying |           |
Indexes:
    "product_pkey" PRIMARY KEY, btree (product_id)

Para saber más sobre la clave principal y cómo alterar una tabla en Postgres, visite el siguiente blog.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

Artículo relacionado - PostgreSQL Key

Artículo relacionado - PostgreSQL Table