Clave primaria en PostgreSQL

La clave primaria en PostgreSQL es una de los aspectos más importantes a la hora de crear una tabla. La clave primaria indica a la tabla cuando un registro es único, es decir, la columna o columnas escogidas nunca tendrán valores repetidos ni con valores nulos.

Ejemplo

Para entenderlo voy a poner un ejemplo muy sencillo… imagina que tienes una tabla de empleados con columnas de nombre, apellidos, DNI, etc… ¿cuál de estas columnas crees que sería la clave primaria? En este caso es el DNI, porque cada persona tiene un número de DNI y jamás se repetirá, es único. A grandes rasgos podemos decir que la clave primaria de una tabla es como el DNI de una persona, un dato único, que nunca se puede repetir y con el cual puedes identificar el resto de valores.

Requisitos

  • Normalmente la clave primaria se define al crear la tabla, aunque no es obligatorio.
  • Cualquier columna, de cualquier tipo, puede ser una clave primaria.
  • La clave primaria puede ser un columna o un conjunto de columnas de uno o más tipos de datos.
  • Solo puede existir una clave primaria por tabla.
  • Los valores de la columna de la clave primaria no se pueden repetir y no puede contener valores nulos.

Definir clave primaria al crear la tabla

Lo habitual es crear la clave primaria cuando creamos la tabla. Se hace con la siguiente sintaxis:

CREATE TABLE nombre_tabla (
	columna_1 tipo_dato PRIMARY KEY,
	columna_2 tipo_dato,
	…
);

En el siguiente ejemplo puedes observar como se crea la clave primaria sobre la columna DNI de la tabla de clientes:

CREATE TABLE clientes (
	dni varchar(9) PRIMARY KEY,
	nombre varchar(50)
);

Si necesitas crear una clave primaria de dos o más columnas la sintaxis es la siguiente:

CREATE TABLE nombre_tabla (
	columna_1 tipo_dato,
	columna_2 tipo_dato,
	… 
        PRIMARY KEY (columna_1, columna_2)
);

Nombre de la clave primaria

El nombre de la clave primaria es automático y su nomenclatura es nombreTabla_pkey. En el caso de nuestra tabla seria clientes_pkey., pero si quieres darle otro nombre, es posible hacerlo con la siguiente sintaxis:

CREATE TABLE nombre_tabla (
	columna_1 tipo_dato,
	columna_2 tipo_dato,
	… 
        CONSTRAINT nombre_clave_primaria PRIMARY KEY(columna_1, columna_2,...);
);

Siguiendo con nuestro ejemplo de clientes, vamos a crear la tabla con una clave primaria llamada pk_dni:

CREATE TABLE clientes (
	dni varchar(9),
	nombre varchar(50),
	CONSTRAINT pk_dni PRIMARY KEY(DNI)
);
Clave primaria en PostgreSQL

Definir clave primaria de una tabla ya existente

Esto no debería ser lo habitual y siempre se debería crear la clave primaria al crear la tabla inicialmente, pero si por cualquier motivo la tabla no tiene clave primaria, puedes crearla con la siguiente sintaxis.

ALTER TABLE nombre_tabla ADD PRIMARY KEY (columna_1, columna_2);

En el siguiente ejemplo puedes observar como se ha creado la tabla productos sin clave primaria y posteriormente se le asigna una:

CREATE TABLE productos (
	n_producto INTEGER,
	coste NUMERIC
);

ALTER TABLE productos 
ADD PRIMARY KEY (n_producto);

Autoincremental en clave primaria

Si no tienes un campo que sea único en tu tabla, el mejor método para crear la clave primaria es crear un incremental. Este campo ira sumando uno al ultimo valor y de este modo será un valor único.

Para establecer un incremental como clave primaria al crear la tabla usa esta sintaxis:

CREATE TABLE nombre_tabla (
	columna1 SERIAL PRIMARY KEY,
	columna2 tipo_dato
);

Si la tabla ya la tienes creada, puedes usar esta sintaxis para crear una columna de tipo incremental y que sea la clave primaria:

ALTER TABLE nombre_tabla 
ADD COLUMN nombreColumna SERIAL PRIMARY KEY;

Borrar clave primaria

Si quieres eliminar una clave primaria usa la siguiente sintaxis:

ALTER TABLE nombre_tabla 
DROP CONSTRAINT nombre_clave_primaria;

Destacar que debes escribir el nombre exacto de la clave primaria, no el nombre de la columna que es clave primaria.

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.