Artikelverzeichnis
Ziel
Verwenden Sie Docker-Compose, um Postgresql 14, pgadmin4 zu installieren und einfach zu verwenden.
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:
Führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem sich die Datei docker-compose.yaml befindet:
docker-compose up -d
Wenn es sich nicht im aktuellen Verzeichnis befindet, geben Sie die Yaml-Datei an, die Sie verwenden müssen.
docker-compose up -f docker-compose.yaml -d
Wie Sie sehen, wurde die Installation erfolgreich durchgeführt.
Hinweis
- Der Speicherort der Volumes ist der Speicherort der bereitgestellten Datenspeichermethode. Denken Sie daran, ihn durch Ihr eigenes Verzeichnis zu ersetzen.
- Wenn es sich um einen Mac mit einem M1-Chip handelt, muss das Image ersetzt werden, das möglicherweise „arm64v8/postgres:14“ lautet. (ungetestet)
1.2 pgadmin4
pgadmin4 wurde gestartet, verwenden wir es. Da Port 80 20001 zugeordnet wurde, öffnen Sie direkt den Port localhost: 20001.
Zu diesem Zeitpunkt können Sie den Server hinzufügen, dh die Datenbank hinzufügen. In der Verbindungsschnittstelle ist die Hostadresse das Wichtigste
. Beachten Sie, dass der Host hier nicht mit dem Localhost der Maschine ausgefüllt werden kann. Aufgrund des Netzwerkisolationsproblems des Docker-Containers muss hier die interne IP-Adresse von Postgres eingegeben werden. Wie erhalte ich diese Adresse?
docker inspect pg14
Dieses pg14 ist der Name des Datenbankcontainers. Sie können sehen, dass die Ausgabeergebnisse das Gateway enthalten.
Sie können sehen, dass die Adresse hier 172.20.0.1 ist. Geben Sie diese Adresse ein und Sie können erfolgreich eine Verbindung zur Datenbank herstellen.
2. Verwendung
2.1 Melden Sie sich über psql an
Da haben wir uns eingestellt
POSTGRES_USER: pg14
POSTGRES_PASSWORD: 123456
Dann können Sie sich mit dem folgenden Befehl anmelden:
psql -h 127.0.0.1 -p 5432 -d postgres -U S.14
- Das -h bezieht sich hier auf die Adresse, an der pg installiert ist.
- -p Portnummer, die Einstellung hier ist 5432
- -d ist der Name der Datenbank. Standardmäßig wird eine Postgres-Bibliothek erstellt.
- -U gibt an, mit welchem Benutzer man sich anmelden soll. Hier wird der beim Erstellen angegebene pg14 verwendet.
➜ 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=#
Um sich lokal anzumelden, können Sie die Standard-IP- und Portnummer verwenden.
2.2 CRUD
Nach der Anmeldung müssen Sie eine Datenbank erstellen, eine Tabelle erstellen, CURD ...
\l Alle Datenbanken auflisten
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 Datenbank erstellen
Datenbank erstellen S.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 Tabelle erstellen und Tabelle löschen
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 Grundoperationen
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. Berechtigungen
Benutzer erstellen und Berechtigungen erteilen; Berechtigungen widerrufen und Benutzer löschen;
BENUTZERTEST MIT PASSWORT „123456“ ERSTELLEN;
GRANT ALL ON great_company zum Testen;
Alle auf great_company vom Test zurückziehen;
Benutzertest löschen;
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. Index
4.1 Einspaltiger Index
CREATE INDEX index_name
ON table_name (column_name);
4.2 Kombinierter Index
CREATE INDEX index_name
ON table_name (column1_name, column2_name);
4.3 Eindeutiger Index
Die Verwendung eindeutiger Indizes dient nicht nur der Leistung, sondern auch der Datenintegrität. Ein eindeutiger Index lässt nicht zu, dass doppelte Werte in die Tabelle eingefügt werden.
CREATE UNIQUE INDEX index_name
on table_name (column_name);
4.4 Wann sollten Sie die Verwendung von Indizes vermeiden?
Obwohl der Zweck von Indizes darin besteht, die Datenbankleistung zu verbessern, gibt es mehrere Situationen, in denen Indizes vermieden werden sollten.
Beachten Sie bei der Verwendung von Indizes die folgenden Richtlinien:
Indizes sollten nicht für kleinere Tabellen verwendet werden.
Indizes sollten nicht für Tabellen verwendet werden, die häufig umfangreichen Aktualisierungs- oder Einfügevorgängen unterzogen werden.
Indizes sollten nicht für Spalten verwendet werden, die eine große Anzahl von NULL-Werten enthalten.
Indizes sollten nicht für häufig verwendete Spalten verwendet werden.
5. TRUNCATE-Anweisung
Der Zweck der TRUNCATE TABLE-Anweisung besteht darin, den Tabelleninhalt zu löschen. Die DELETE-Anweisung ohne WHERE-Bedingungsklausel bedeutet auch das Löschen des Tabelleninhalts. Den Ausführungsergebnissen nach zu urteilen, implementieren beide dieselbe Funktion, die Prinzipien ihrer Implementierung sind jedoch unterschiedlich. Die TRUNCATE TABLE-Anweisung ist eine DDL-Anweisung, bei der es sich um eine Datendefinitionsanweisung handelt. Sie entspricht der Neudefinition einer neuen Tabelle und dem direkten Verwerfen des Inhalts der Originaltabelle, sodass TRUNCATE TABLE sehr schnell ausgeführt wird, während die DELETE-Anweisung eine DML ist Anweisung können wir uns das so vorstellen: Die DELETE-Anweisung löscht Daten einzeln, sodass die DELETE-Anweisung langsam ausgeführt wird, wenn mehrere Datenzeilen gelöscht werden.
6. Deaktivieren Sie die automatische Übermittlung
Deaktivieren Sie die Autocommit-Funktion in psql
\set AUTOCOMMIT off
„AUTOCOMMIT“ in diesem Befehl ist in Großbuchstaben geschrieben und Kleinbuchstaben können nicht verwendet werden. Wenn Kleinbuchstaben verwendet werden, wird kein Fehler gemeldet, aber der Vorgang zum Deaktivieren der automatischen Übermittlung ist ungültig.