Agregar clave principal a una tabla de PostgreSQL solo si no existe
- Asignar una clave principal en una tabla existente en PostgreSQL
- Agregar clave principal a una tabla de PostgreSQL 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:
- Suelte la clave principal si existe.
- 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.