Notizreihe: Docker-Installation Postgresql 14

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.
Erfolgreiche Installation
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.
Fügen Sie hier eine Bildbeschreibung ein
Zu diesem Zeitpunkt können Sie den Server hinzufügen, dh die Datenbank hinzufügen. In der Verbindungsschnittstelle ist die Hostadresse das Wichtigste
Fügen Sie hier eine Bildbeschreibung ein
. 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.
Fügen Sie hier eine Bildbeschreibung ein
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.
Fügen Sie hier eine Bildbeschreibung ein

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.

Ich denke du magst

Origin blog.csdn.net/Apple_wolf/article/details/125119896
Empfohlen
Rangfolge