Introducción
PostgreSQL y otros sistemas de gestión de bases de datos relacionales utilizan bases de datos y tablas para estructurar y organizar sus datos. Podemos revisar la definición de esos dos términos rápidamente:
- bases de datos: separar diferentes conjuntos de estructuras y datos entre sí
- tablas: definir la estructura de datos y almacenar los valores de datos reales dentro de las bases de datos
En PostgreSQL, también existe un objeto intermediario entre las bases de datos y las tablas llamado esquema. :
- esquema: un espacio de nombres dentro de una base de datos que contiene tablas, índices, vistas y otros elementos.
Esta guía no tratará directamente el concepto de esquema de PostgreSQL, pero es bueno saber que está ahí.
En su lugar, nos centraremos en cómo crear y destruir bases de datos y tablas de PostgreSQL. Los ejemplos utilizarán principalmente SQL, pero hacia el final, le mostraremos cómo realizar algunas de estas tareas mediante la línea de comandos. Estas alternativas usan herramientas incluidas en la instalación estándar de PostgreSQL que están disponibles si tiene acceso administrativo al host de PostgreSQL.
Algunas de las declaraciones cubiertas en esta guía, particularmente PostgreSQL CREATE TABLE
declaración, tienen muchas opciones adicionales que estaban fuera del alcance de este artículo. Si desea obtener más información, consulte la documentación oficial de PostgreSQL para obtener más información.
Requisitos previos
Para seguir esta guía, deberá iniciar sesión en una instancia de PostgreSQL con un usuario con privilegios administrativos mediante psql
cliente de línea de comandos. Su instancia de PostgreSQL se puede instalar localmente, de forma remota o aprovisionada por un proveedor.
Específicamente, su usuario de PostgreSQL necesitará CREATE DB
privilegio o ser un Superuser
, que puede consultar con el \du
metacomando en psql
:
\du
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
El postgres
superusuario, que se crea automáticamente durante la instalación, tiene los privilegios necesarios, pero puede usar cualquier usuario con Create DB
privilegio.
Crear una nueva base de datos
Una vez que esté conectado a su instancia de PostgreSQL usando psql
o cualquier otro cliente SQL, puede crear una base de datos usando SQL.
La sintaxis básica para crear una base de datos es:
CREATE DATABASE db_name;
Esto creará una base de datos llamada db_name
en el servidor actual con el usuario actual configurado como el propietario de la nueva base de datos utilizando la configuración de base de datos predeterminada. Puede ver las propiedades de la template1
predeterminada plantilla usando el siguiente psql
metacomando:
\l template1
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(1 row)
Puede agregar parámetros adicionales para modificar la forma en que se crea su base de datos. Estas son algunas opciones comunes:
- CODIFICACIÓN: establece la codificación de caracteres para la base de datos.
- LC_COLLATE: establece la colección , u ordene, ordene la base de datos. Esta es una opción de localización que determina cómo se organizan los artículos cuando se ordenan.
- LC_CTYPE: establece la clasificación de caracteres para la nueva base de datos. Esta es una opción de localización que afecta qué caracteres se consideran mayúsculas, minúsculas y dígitos.
Estos pueden ayudar a garantizar que la base de datos pueda almacenar datos en los formatos que planea admitir y con las preferencias de localización de su proyecto.
Por ejemplo, para asegurarse de que su base de datos se cree con compatibilidad con Unicode y anular la configuración regional propia del servidor para usar la localización en inglés americano (todo esto coincide con los valores en la template1
se muestra arriba, por lo que en realidad no se producirá ningún cambio), puede escribir:
CREATE DATABASE db_name ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
Para seguir los ejemplos de esta guía, cree una base de datos llamada school
utilizando la configuración regional predeterminada de su instancia y la codificación de caracteres UTF8:
CREATE DATABASE school ENCODING 'UTF8';
Esto creará su nueva base de datos utilizando las especificaciones que proporcionó.
Lista de bases de datos existentes
Para determinar qué bases de datos están actualmente disponibles en su servidor o clúster, puede usar la siguiente instrucción SQL:
SELECT datname FROM pg_database;
Esto enumerará cada una de las bases de datos actualmente definidas dentro del entorno:
datname----------- _dodb template1 template0 defaultdb school(5 rows)
Como se mencionó anteriormente, si está conectado mediante psql
cliente, también puede obtener esta información \l
metacomando:
\l
Esto mostrará los nombres de bases de datos disponibles junto con sus propietarios, codificación, configuraciones locales y privilegios:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- _dodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | defaultdb | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | school | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(5 rows)
La school
base de datos que creamos se muestra entre las otras bases de datos en el sistema. Esta es una buena manera de obtener una descripción general de las bases de datos dentro de su servidor o clúster.
Crear tablas dentro de bases de datos
Después de crear una o más bases de datos, puede comenzar a definir tablas para almacenar sus datos. Las tablas constan de un nombre y un esquema definido que determina los campos y tipos de datos que debe contener cada registro.
PostgreSQL CREATE TABLE
sintaxis
Puede crear tablas utilizando CREATE TABLE
declaración. Una sintaxis básica simplificada para el comando es similar a la siguiente:
CREATE TABLE table_name ( column_name TYPE [column_constraint], [table_constraint,]);
Los componentes de la sintaxis anterior incluyen lo siguiente:
CREATE TABLE table_name
:La declaración de creación básica que indica que desea definir una tabla. Eltable_name
el marcador de posición debe reemplazarse con el nombre de la tabla que desea usar.column_name TYPE
:Define una columna básica dentro de la tabla. Elcolumn_name
el marcador de posición debe reemplazarse con el nombre que desea usar para su columna. ElTYPE
especifica el tipo de datos de PostgreSQL para la columna. Los datos almacenados en la tabla deben ajustarse a la estructura de la columna y los tipos de datos de la columna para ser aceptados.column_constraint
:Las restricciones de columna son restricciones opcionales para agregar más restricciones a los datos que se pueden almacenar en la columna. Por ejemplo, puede exigir que las entradas no sean enteros nulos, únicos o positivos.table_constraints
:Las restricciones de tabla son similares a las restricciones de columna, pero implican la interacción de varias columnas. Por ejemplo, podría tener una restricción de tabla que verifique que unDATE_OF_BIRTH
es anterior aDATE_OF_DEATH
en una tabla.
Crear tablas condicionalmente con IF NOT EXISTS
cláusula
De forma predeterminada, si intenta crear una tabla en PostgreSQL que ya existe en la base de datos, se producirá un error. Para solucionar este problema en los casos en los que desea crear una tabla si no está presente, pero continuar si ya existe, puede usar IF NOT EXISTS
cláusula. El IF NOT EXISTS
calificador opcional que le dice a PostgreSQL que ignore la declaración si la base de datos ya existe.
Para usar el IF NOT EXISTS
cláusula, insértela en el comando después de CREATE TABLE
sintaxis y antes del nombre de la tabla:
CREATE TABLE IF NOT EXISTS table_name ( column_name TYPE [column_constraint], [table_constraint,]);
Esta variante intentará crear la tabla. Si ya existe una tabla con ese nombre dentro de la base de datos especificada, PostgreSQL arrojará una advertencia que indica que el nombre de la tabla ya se tomó en lugar de fallar con un error.
Cómo crear tablas en PostgreSQL
La sintaxis anterior es suficiente para crear tablas básicas. Como ejemplo, crearemos dos tablas dentro de nuestra school
base de datos. Una tabla se llamará supplies
y el otro se llamará teachers
:
En los supplies
tabla, queremos tener los siguientes campos:
- ID: Una identificación única para cada tipo de material escolar.
- Nombre: El nombre de un artículo escolar específico.
- Descripción: Una breve descripción del artículo.
- Fabricante: El nombre del fabricante del artículo.
- Color: El color del artículo.
- Inventario: La cantidad de artículos que tenemos para cierto tipo de útiles escolares. Esto nunca debe ser menor que 0.
Podemos crear los supplies
tabla con las cualidades anteriores usando el siguiente SQL.
Primero, cambia a la school
base de datos que creaste con psql
escribiendo:
\c school
Esto cambiará la base de datos a la que apuntarán nuestros futuros comandos. Su mensaje debería cambiar para reflejar la base de datos.
A continuación, cree los supplies
tabla con la siguiente declaración:
CREATE TABLE supplies ( id INT PRIMARY KEY, name VARCHAR, description VARCHAR, manufacturer VARCHAR, color VARCHAR, inventory int CHECK (inventory > 0));
Esto creará los supplies
tabla dentro de la school
base de datos. La PRIMARY KEY
La restricción de columna es una restricción especial que se utiliza para indicar columnas que pueden identificar de forma única los registros dentro de la tabla. Como tal, la restricción especifica que la columna no puede ser nula y debe ser única. PostgreSQL crea índices para columnas de clave principal para aumentar la velocidad de consulta.
Verifique que la nueva tabla esté presente escribiendo:
\dt
List of relations Schema | Name | Type | Owner --------+----------+-------+--------- public | supplies | table | doadmin(1 row)
Verifique que el esquema refleje el diseño previsto escribiendo:
\d supplies
Table "public.supplies" Column | Type | Collation | Nullable | Default--------------+-------------------+-----------+----------+--------- id | integer | | not null | name | character varying | | | description | character varying | | | manufacturer | character varying | | | color | character varying | | | inventory | integer | | |Indexes: "supplies_pkey" PRIMARY KEY, btree (id)Check constraints: "supplies_inventory_check" CHECK (inventory > 0)
Podemos ver cada una de las columnas y tipos de datos que especificamos. La restricción de columna que definimos para el inventory
columna aparece hacia el final.
A continuación, crearemos un teachers
mesa. En esta tabla, las siguientes columnas deben estar presentes:
- ID de empleado :Un número de identificación de empleado único.
- Nombre :El nombre del profesor.
- Apellido :El apellido del profesor.
- Asunto :La materia que el profesor es contratado para enseñar.
- Nivel de grado :El nivel de grado de los estudiantes para los que el profesor está contratado para enseñar.
Crear los teachers
tabla con el esquema anterior con el siguiente SQL:
CREATE TABLE teachers ( id INT PRIMARY KEY, first_name VARCHAR, last_name VARCHAR, subject VARCHAR, grade_level int);
Cómo crear tablas con claves primarias y claves foráneas
Puede encontrar información sobre cómo crear tablas con claves primarias y externas en algunas de nuestras otras guías de PostgreSQL. Las claves primarias y las claves externas son tipos de restricciones de base de datos dentro de PostgreSQL.
Una clave principal es una columna o columna especial que se garantiza que es única en todas las filas dentro de la misma tabla. Todas las claves primarias se pueden usar para identificar de forma única una fila específica. Las claves primarias no solo garantizan que cada fila tenga un valor único para las columnas de la clave principal, sino que también garantizan que ninguna fila contenga NULL
valores para esa columna. A menudo, la clave principal en PostgreSQL usa el siguiente formato para especificar una clave principal incremental asignada automáticamente:id SERIAL PRIMARY KEY
.
Las claves externas son una forma de garantizar que una columna o columnas en una tabla coincidan con los valores contenidos en otra tabla. Esto ayuda a garantizar la integridad referencial entre tablas.
Cómo ver tablas en PostgreSQL
En PostgreSQL, puede enumerar tablas de diferentes maneras según la información que esté buscando.
Si desea ver qué tablas están disponibles en su base de datos, puede usar \dt
meta-comando incluido con el psql
cliente para enumerar todas las tablas, como demostramos anteriormente:
\dt
List of relations Schema | Name | Type | Owner--------+----------+-------+--------- public | supplies | table | doadmin public | teachers | table | doadmin(2 rows)
También puede verificar que el esquema de la tabla coincida con sus especificaciones:
\d teachers
Table "public.teachers" Column | Type | Collation | Nullable | Default-------------+-------------------+-----------+----------+--------- id | integer | | not null | first_name | character varying | | | last_name | character varying | | | subject | character varying | | | grade_level | integer | | |Indexes: "teachers_pkey" PRIMARY KEY, btree (id)
Los teachers
la tabla parece coincidir con nuestra definición.
Alterar tablas
Si necesita cambiar el esquema de una tabla existente en PostgreSQL, puede usar ALTER TABLE
dominio. La ALTER TABLE
El comando es muy similar a CREATE TABLE
comando, pero opera en una tabla existente.
Alterar la sintaxis de la tabla
La sintaxis básica para modificar tablas en PostgreSQL se ve así:
ALTER TABLE <table_name> <change_command> <change_parameters>
El <change_command>
indica el tipo exacto de cambio que le gustaría realizar, ya sea que implique establecer diferentes opciones en la tabla, agregar o eliminar columnas, o cambiar tipos o restricciones. El <change_parameters>
parte del comando contiene información adicional que PostgreSQL necesita para completar el cambio.
Agregar columnas a tablas
Puede agregar una columna a una tabla de PostgreSQL con ADD COLUMN
cambio de mando. Los parámetros de cambio incluirán el nombre de la columna, el tipo y las opciones, tal como los especificaría en CREATE TABLE
comando.
Por ejemplo, para agregar una columna llamada missing_column
del text
escribe en una tabla llamada some_table
, escribiría:
ALTER TABLE some_table ADD COLUMN missing_column text;
Eliminando columnas de tablas
Si, en cambio, desea eliminar una columna existente, puede usar el DROP COLUMN
comando en su lugar. Debe especificar el nombre de la columna que desea eliminar como parámetro de cambio:
ALTER TABLE some_table DROP COLUMN useless_column;
Cambiando el tipo de datos de una columna
Para cambiar el tipo de datos que usa PostgreSQL para una columna específica, puede usar ALTER COLUMN
cambie el comando con SET DATA TYPE
comando de columna Los parámetros incluyen el nombre de la columna, su nuevo tipo y un USING
opcional cláusula para especificar cómo se debe convertir el tipo antiguo al tipo nuevo.
Por ejemplo, para establecer el valor de un id
columna en el resident
tabla a un int
usando un molde explícito, podemos escribir lo siguiente:
ALTER TABLE resident ALTER COLUMN id SET DATA TYPE int USING id::int;
Otros cambios en la tabla
Se pueden lograr muchos otros tipos de cambios con ALTER TABLE
dominio. Para obtener más información sobre las opciones disponibles, consulte la documentación oficial de PostgreSQL para ALTER TABLE
.
Soltar tablas
Si desea eliminar una tabla, puede usar el DROP TABLE
instrucción SQL. Esto eliminará la tabla y todos los datos almacenados en ella.
La sintaxis básica se ve así:
DROP TABLE table_name;
Esto eliminará la tabla si existe y generará un error si el nombre de la tabla no existe.
Si desea eliminar la tabla si existe y no hacer nada si no existe, puede incluir el IF EXISTS
calificador dentro de la declaración:
DROP TABLE IF EXISTS table_name;
Las tablas que tienen dependencias con otras tablas u objetos no se pueden eliminar de forma predeterminada mientras existan esas dependencias. Para evitar el error, puede incluir opcionalmente el CASCADE
parámetro, que descarta automáticamente cualquier dependencia junto con la tabla:
DROP TABLE table_name CASCADE;
Si alguna tabla tiene una clave externa restricción, que hace referencia a la tabla que está eliminando, esa restricción se eliminará automáticamente.
Eliminar los supplies
tabla que creamos anteriormente escribiendo:
DROP TABLE supplies;
Mantendremos a los teachers
base de datos para demostrar que la declaración para eliminar bases de datos también elimina todos los objetos secundarios como tablas.
Soltar bases de datos
La DROP DATABASE
La declaración le dice a PostgreSQL que elimine la base de datos especificada. La sintaxis básica se ve así:
DROP DATABASE database_name;
Reemplace el database_name
marcador de posición con el nombre de la base de datos que desea eliminar. Esto eliminará la base de datos si se encuentra. Si no se puede encontrar la base de datos, se producirá un error:
DROP DATABASE some_database;
ERROR: database "some_database" does not exist
Si desea eliminar la base de datos si existe y no hacer nada, incluya el IF EXISTS
opcional. opción:
DROP DATABASE IF EXISTS some_database;
NOTICE: database "some_database" does not exist, skippingDROP DATABASE
Esto eliminará la base de datos o no hará nada si no se encuentra.
Para eliminar la school
base de datos que usamos en esta guía, enumere las bases de datos existentes en su sistema:
\l
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- _dodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | defaultdb | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | school | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(5 rows)
Abra una nueva conexión a una de las bases de datos que no desea eliminar:
\c defaultdb
Una vez que la nueva conexión esté abierta, elimine la school
base de datos con el siguiente comando:
DROP DATABASE school;
Esto eliminará la school
base de datos junto con los teachers
tabla definida dentro.
Si ha estado siguiendo el uso de SQL, puede terminar aquí o pasar a la conclusión. Si desea obtener información sobre cómo crear y eliminar bases de datos desde la línea de comandos, continúe con la siguiente sección.
Uso de herramientas de línea de comandos administrativas para crear y borrar bases de datos
Si tiene acceso de shell al servidor o clúster donde está instalado PostgreSQL, puede tener acceso a algunas herramientas de línea de comandos adicionales que pueden ayudar a crear y eliminar bases de datos. El createdb
y dropdb
Los comandos se incluyen con PostgreSQL cuando se instala.
Crear una nueva base de datos desde la linea de comandos
La sintaxis básica para createdb
El comando (que debe ejecutar un usuario del sistema con acceso de administrador a PostgreSQL) es:
createdb db_name
Esto creará una base de datos llamada db_name
dentro de PostgreSQL utilizando la configuración predeterminada.
El comando también acepta opciones para modificar su comportamiento, al igual que la variante de SQL que vio anteriormente. Puede obtener más información sobre estas opciones con man createdb
. Algunas de las opciones más importantes son:
--encoding=
:establece la codificación de caracteres para la base de datos.--locale=
:establece la configuración regional de la base de datos.
Estos pueden ayudar a garantizar que la base de datos pueda almacenar datos en los formatos que planea admitir y con las preferencias de localización de su proyecto.
Por ejemplo, para asegurarse de que su base de datos se cree compatible con Unicode y anular la configuración regional propia del servidor para usar la localización en inglés americano, puede escribir:
createdb --encoding=UTF8 --locale=en_US db_name
Suponiendo que tenga los permisos correctos, la base de datos se creará de acuerdo con sus especificaciones.
Para seguir los ejemplos de esta guía, puede crear una base de datos llamada school
utilizando la configuración regional predeterminada y la codificación de caracteres UTF8 escribiendo:
createdb --encoding=UTF8 school
Luego podría conectarse a la base de datos usando psql
para configurar sus mesas como de costumbre.
Soltar bases de datos desde la línea de comandos
El dropdb
comando refleja el DROP DATABASE
instrucción SQL. Tiene la siguiente sintaxis básica:
dropdb database_name
Cambie el database_name
marcador de posición para hacer referencia a la base de datos que desea eliminar.
De forma predeterminada, este comando generará un error si no se puede encontrar la base de datos especificada. Para evitar esto, puede incluir el --if-exists
opcional bandera:
dropdb --if-exists database_name
Esto eliminará la base de datos especificada, si existe. De lo contrario, no hará nada.
Para eliminar la school
base de datos que creamos anteriormente, escriba:
dropdb school
Esto eliminará la base de datos y cualquier elemento secundario, como tablas, dentro.
Conclusión
Este artículo cubrió los conceptos básicos de cómo crear y eliminar bases de datos y tablas dentro de PostgreSQL. Estos son algunos de los comandos más básicos necesarios para configurar un sistema de base de datos y definir la estructura de sus datos.
Como se mencionó anteriormente, las instrucciones SQL cubiertas en este tutorial de PostgreSQL, particularmente CREATE TABLE
declaración, tiene muchos parámetros adicionales que se pueden usar para cambiar el comportamiento de PostgreSQL. Puede obtener más información sobre estos consultando la documentación oficial de PostgreSQL.