Serie de notas: instalación de Docker Postgresql 14

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
Instalación exitosa
.

  • 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.
Insertar descripción de la imagen aquí
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
Insertar descripción de la imagen aquí
. 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.
Insertar descripción de la imagen aquí
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.
Insertar descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/Apple_wolf/article/details/125119896
Recomendado
Clasificación