Annuaire d'articles
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.
- 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.
À 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
. 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.
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.
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.