Directorio de artículos
Objetivo
Utilice docker-compose para instalar Postgresql 14, pgadmin4 y utilícelo de forma sencilla.
1. Instalación
1.1 docker-compose.ymal
version: "3.5"
services:
postgres:
container_name: pg14
image: postgres:14
environment:
POSTGRES_USER: pg14
POSTGRES_PASSWORD: 123456
PGDATA: /data/postgres
volumes:
- postgres14:/Users/yuanyao/tools/pg
ports:
- "5432:5432"
restart: unless-stopped
pgadmin4:
container_name: pgadmin4
image: dpage/pgadmin4
ports:
- 20001:80
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: 123456
volumes:
postgres14:
Ejecute el siguiente comando en el directorio donde se encuentra el archivo docker-compose.yaml:
docker-compose up -d
Si no está en el directorio actual, especifique el archivo yaml que necesita usar.
docker-compose up -f docker-compose.yaml -d
Como puede ver, se ha instalado correctamente
.
- La ubicación de los volúmenes es la ubicación del método de almacenamiento de datos montado. Recuerde reemplazarlo con su propio directorio.
- Si es una Mac con chip M1, es necesario reemplazar la imagen, que puede ser "arm64v8/postgres:14". (no probado)
1.2 pgadmin4
Se ha iniciado pgadmin4, usémoslo. Dado que el puerto 80 se ha asignado a 20001, abra directamente el puerto localhost: 20001.
En este momento, puede agregar el servidor, es decir, agregar la base de datos. En la interfaz de conexión, lo más importante es la dirección del host
. Tenga en cuenta que el host aquí no se puede completar con el host local de la máquina. Debido al problema de aislamiento de red del contenedor acoplable, aquí es necesario completar la dirección IP interna de postgres. ¿Cómo obtener esta dirección?
docker inspect pg14
Esta página 14 es el nombre del contenedor de la base de datos. Puede ver que los resultados de salida incluyen la puerta de enlace.
Puede ver que la dirección aquí es 172.20.0.1. Complete esta dirección y podrá conectarse exitosamente a la base de datos.
2. uso
2.1 Iniciar sesión a través de psql
Ya que hemos establecido
POSTGRES_USER: pg14
POSTGRES_PASSWORD: 123456
Luego puede iniciar sesión usando el siguiente comando:
psql -h 127.0.0.1 -p 5432 -d postgres -U pg14
- El -h aquí se refiere a la dirección donde está instalado pg.
- -p número de puerto, la configuración aquí es 5432
- -d es el nombre de la base de datos. De forma predeterminada, se creará una biblioteca postgres.
- -U indica qué usuario usar para iniciar sesión. Aquí se usa la página 14 especificada al crear.
➜ pg docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c64dc3d68eb2 postgres:14 "docker-entrypoint.s…" 42 hours ago Up 42 hours 0.0.0.0:5432->5432/tcp pg14
➜ pg docker exec -it pg14 bash
root@c64dc3d68eb2:/# cd data/
root@c64dc3d68eb2:/data# cd postgres/
root@c64dc3d68eb2:/data/postgres# ls
base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_wal postgresql.conf
global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact postmaster.opts
pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf postmaster.pid
root@c64dc3d68eb2:/data/postgres# psql -h 127.0.0.1 -p 5432 -d postgres -U pg14
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.
postgres=#
postgres=# exit
root@c64dc3d68eb2:/data/postgres# psql -d postgres -U pg14
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.
postgres=#
Para iniciar sesión localmente, puede utilizar la IP y el número de puerto predeterminados.
2.2 CRUD
Después de iniciar sesión, debe crear una base de datos, crear una tabla, CURD ...
\l Listar todas las bases de datos
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+------------+------------+-------------------
postgres | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
template1 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
(3 rows)
2.2.1 Crear base de datos
crear base de datos pág.14;
postgres=# create database pg14;
CREATE DATABASE
postgres=# \l
pg14 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
pgtest | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
template1 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
postgres=# \c pg14;
You are now connected to database "pg14" as user "pg14".
pg14=# \l
pg14 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
pgtest | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | pg14 | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
template1 | pg14 | UTF8 | en_US.utf8 | en_US.utf8 | =c/pg14 +
| | | | | pg14=CTc/pg14
2.2.2 Crear tabla y eliminar tabla
CREAR TABLA EMPRESA (
ID INT CLAVE PRIMARIA NO NULA,
TEXTO DEL NOMBRE NO NULA,
EDAD INT NO NULA,
DIRECCIÓN CHAR(50),
SALARIO REAL
);
pg14=# CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE
pg14=# \d
List of relations
Schema | Name | Type | Owner
--------+---------+-------+-------
public | company | table | pg14
(1 row)
pg14=# \dt
public | company | table | pg14
pg14=# \d company
id | integer | | not null |
name | text | | not null |
age | integer | | not null |
address | character(50) | | |
salary | real | | |
pg14=# \d
public | company | table | pg14
pg14=# drop table company;
DROP TABLE
pg14=# \d
Did not find any relations.
2.2.3 Operaciones básicas
pg14=# insert into company(id, name, age,address) values(11, 'tom',23,'xxx');
INSERT 0 1
pg14=# select * from company;
11 | tom | 23 | xxx |
pg14=# insert into company(id, name, age,address) values(12, 'Jerry',23,'xxx');
INSERT 0 1
pg14=# select * from company;
11 | tom | 23 | xxx |
12 | Jerry | 23 | xxx |
pg14=# update company set name = 'TOM' where name = 'tom';
UPDATE 1
pg14=# select * from company;
12 | Jerry | 23 | xxx |
11 | TOM | 23 | xxx |
pg14=# ALTER TABLE company add email VARCHAR(40);
ALTER TABLE
pg14=# \d company;
id | integer | | not null |
name | text | | not null |
age | integer | | not null |
address | character(50) | | |
salary | real | | |
email | character varying(40) | | |
pg14=# ALTER TABLE company drop column salary;
ALTER TABLE
pg14=# \d company;
id | integer | | not null |
name | text | | not null |
age | integer | | not null |
address | character(50) | | |
email | character varying(40) | | |
pg14=# ALTER TABLE company RENAME TO great_company;
ALTER TABLE
pg14=# \d
public | great_company | table | pg14
pg14=#
3. Permisos
Crear usuarios y otorgar permisos, revocar permisos y eliminar usuarios;
CREAR USUARIO prueba CON CONTRASEÑA '123456';
OTORGAR TODO EN great_company para probar;
revocar todo en great_company de la prueba;
abandonar la prueba de usuario;
pg14=# CREATE USER test WITH PASSWORD '123456';
CREATE ROLE
pg14=# \du test
test | | {
}
pg14=# GRANT ALL ON great_company to test;
GRANT
pg14=# revoke all on great_company from test;
REVOKE
pg14=# drop user test;
DROP ROLE
4. Índice
4.1 Índice de una sola columna
CREATE INDEX index_name
ON table_name (column_name);
4.2 Índice combinado
CREATE INDEX index_name
ON table_name (column1_name, column2_name);
4.3 Índice único
El uso de índices únicos no es solo para mejorar el rendimiento, sino también para la integridad de los datos. Un índice único no permite insertar valores duplicados en la tabla.
CREATE UNIQUE INDEX index_name
on table_name (column_name);
4.4 ¿Cuándo debería evitar el uso de índices?
Aunque el propósito de los índices es mejorar el rendimiento de la base de datos, existen varias situaciones en las que se deben evitar.
Al utilizar índices, tenga en cuenta las siguientes directrices:
Los índices no deben usarse en tablas más pequeñas.
Los índices no deben usarse en tablas que se someten a operaciones frecuentes de inserción o actualización de gran volumen.
Los índices no deben usarse en columnas que contengan una gran cantidad de valores NULL.
Los índices no deben usarse en columnas operadas con frecuencia.
5. Declaración TRUNCAR
El propósito de la declaración TRUNCATE TABLE es borrar el contenido de la tabla. La declaración DELETE sin una cláusula condicional WHERE también significa borrar el contenido de la tabla. A juzgar por los resultados de la ejecución, las dos implementan la misma función, pero los principios de su implementación son diferentes. La declaración TRUNCATE TABLE es una declaración DDL, que es una declaración de definición de datos, equivale a redefinir una nueva tabla y descartar directamente el contenido de la tabla original, por lo que TRUNCATE TABLE se ejecutará muy rápidamente, mientras que la declaración DELETE es un DML. declaración, podemos pensar en ello como La declaración DELETE elimina los datos uno por uno, por lo que la declaración DELETE se ejecuta lentamente al eliminar varias filas de datos.
6. Desactive el envío automático
Desactivar la función de confirmación automática en psql
\set AUTOCOMMIT off
"AUTOCOMMIT" en este comando está en mayúsculas y no se pueden usar minúsculas. Si se usan minúsculas, no se informará ningún error, pero la operación de desactivar el envío automático no será válida.