Série de notes : installation de Docker Postgresql 14

Cible

Utilisez docker-compose pour installer Postgresql 14, pgadmin4 et utilisez-le simplement.

1.Installation

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:

Exécutez la commande suivante dans le répertoire où se trouve le fichier docker-compose.yaml :

docker-compose up -d 

S'il ne se trouve pas dans le répertoire actuel, spécifiez le fichier yaml que vous devez utiliser.

docker-compose up -f docker-compose.yaml -d

Comme vous pouvez le constater , il a été installé avec succès.
Installation réussie

  • L'emplacement des volumes est l'emplacement de la méthode de stockage des données montée. N'oubliez pas de le remplacer par votre propre répertoire.
  • S'il s'agit d'un Mac doté d'une puce M1, l'image doit être remplacée, qui peut être « arm64v8/postgres:14 ». (non testé)

1.2 pgadmin4

pgadmin4 a été démarré, utilisons-le. Puisque le port 80 a été mappé sur 20001, ouvrez directement le port localhost: 20001.
Insérer la description de l'image ici
À ce stade, vous pouvez ajouter le serveur, c'est-à-dire ajouter la base de données. Dans l'interface de connexion, le plus important est l'adresse de l'hôte
Insérer la description de l'image ici
. Notez que l'hôte ici ne peut pas être renseigné avec l'hôte local de la machine. En raison du problème d'isolation réseau du conteneur Docker, l'adresse IP interne de postgres doit être renseignée ici. Comment obtenir cette adresse ?

docker inspect pg14

Cette page 14 est le nom du conteneur de base de données. Vous pouvez voir que les résultats de sortie incluent la passerelle.
Insérer la description de l'image ici
Vous pouvez voir que l'adresse ici est 172.20.0.1. Remplissez cette adresse et vous pourrez vous connecter avec succès à la base de données.
Insérer la description de l'image ici

2. Utiliser

2.1 Connectez-vous via psql

Puisque nous avons fixé

POSTGRES_USER: pg14
POSTGRES_PASSWORD: 123456

Ensuite, vous pouvez vous connecter à l'aide de la commande suivante :

psql -h 127.0.0.1 -p 5432 -d postgres -U pg14

  • Le -h ici fait référence à l'adresse où pg est installé.
  • -p numéro de port, le paramètre ici est 5432
  • -d est le nom de la base de données. Par défaut, une bibliothèque postgres sera créée.
  • -U indique quel utilisateur utiliser pour se connecter. Le pg14 spécifié lors de la création est utilisé ici.
➜  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=#

Pour vous connecter localement, vous pouvez utiliser l'adresse IP et le numéro de port par défaut.

2.2 CRUD

Après vous être connecté, vous devez créer une base de données, créer une table, CURD...

\l Liste toutes les bases de données

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 Créer une base de données

créer une base de données pg14 ;

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 Créer une table et supprimer une table

CREATE TABLE COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY 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 Opérations de base

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. Autorisations

Créer des utilisateurs et accorder des autorisations ; révoquer des autorisations et supprimer des utilisateurs ;

CRÉER un test UTILISATEUR AVEC LE MOT DE PASSE '123456' ;
GRANT ALL ON great_company pour tester ;
révoquer tout sur great_company du test ;
abandonner le test utilisateur ;

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. Indice

4.1 Index à une seule colonne

CREATE INDEX index_name
ON table_name (column_name);

4.2 Indice combiné

CREATE INDEX index_name
ON table_name (column1_name, column2_name);

4.3 Indice unique

L’utilisation d’index uniques n’est pas seulement bénéfique aux performances, mais également à l’intégrité des données. Un index unique ne permet pas d'insérer des valeurs en double dans le tableau.

CREATE UNIQUE INDEX index_name
on table_name (column_name);

4.4 Quand faut-il éviter d'utiliser les index ?

Bien que le but des index soit d'améliorer les performances des bases de données, il existe plusieurs situations dans lesquelles les index doivent être évités.

Lorsque vous utilisez des index, tenez compte des directives suivantes :

Les index ne doivent pas être utilisés sur des tables plus petites.
Les index ne doivent pas être utilisés sur des tables qui subissent fréquemment des opérations de mise à jour ou d'insertion de gros volumes.
Les index ne doivent pas être utilisés sur des colonnes contenant un grand nombre de valeurs NULL.
Les index ne doivent pas être utilisés sur des colonnes fréquemment utilisées.

5. Instruction TRUNCATE

Le but de l'instruction TRUNCATE TABLE est d'effacer le contenu de la table. L'instruction DELETE sans clause conditionnelle WHERE signifie également effacer le contenu de la table. À en juger par les résultats de l'exécution, les deux implémentent la même fonction, mais les principes de leur implémentation sont différents. L'instruction TRUNCATE TABLE est une instruction DDL, qui est une instruction de définition de données. Cela équivaut à redéfinir une nouvelle table et à supprimer directement le contenu de la table d'origine, donc TRUNCATE TABLE sera exécuté très rapidement ; tandis que l'instruction DELETE est une instruction DML. , nous pouvons y penser comme si l'instruction DELETE supprime les données une par une, de sorte que l'instruction DELETE s'exécute lentement lors de la suppression de plusieurs lignes de données.

6. Désactivez la soumission automatique

Désactiver la fonction de validation automatique dans psql

\set AUTOCOMMIT off

"AUTOCOMMIT" dans cette commande est en majuscule et les minuscules ne peuvent pas être utilisées. Si des minuscules sont utilisées, aucune erreur ne sera signalée, mais l'opération de désactivation de la soumission automatique sera invalide.

Je suppose que tu aimes

Origine blog.csdn.net/Apple_wolf/article/details/125119896
conseillé
Classement