Série de notas: instalação do docker Postgresql 14

Alvo

Use docker-compose para instalar o Postgresql 14, pgadmin4 e use-o de forma simples.

1. Instalação

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:

Execute o seguinte comando no diretório onde o arquivo docker-compose.yaml está localizado:

docker-compose up -d 

Se não estiver no diretório atual, especifique o arquivo yaml que você precisa usar.

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

Como você pode ver, ele foi instalado com sucesso.
Instalação bem-sucedida
Nota

  • A localização dos volumes é a localização do método de armazenamento de dados montado. Lembre-se de substituí-lo por seu próprio diretório.
  • Se for um Mac com chip M1, a imagem precisa ser substituída, que pode ser "arm64v8/postgres:14". (não testado)

1.2pgadmin4

O pgadmin4 foi iniciado, vamos usá-lo. Como a porta 80 foi mapeada para 20001, abra diretamente a porta localhost: 20001.
Insira a descrição da imagem aqui
Neste momento, você pode adicionar o servidor, ou seja, adicionar o banco de dados. Na interface de conexão, o mais importante é o endereço do host
Insira a descrição da imagem aqui
. Observe que o host aqui não pode ser preenchido com o host local da máquina. Devido ao problema de isolamento de rede do contêiner docker, o endereço IP interno do postgres precisa ser preenchido aqui. Como conseguir esse endereço?

docker inspect pg14

Este pg14 é o nome do contêiner do banco de dados. Você pode ver que os resultados de saída incluem gateway.
Insira a descrição da imagem aqui
Você pode ver que o endereço aqui é 172.20.0.1. Preencha esse endereço e você poderá se conectar ao banco de dados com êxito.
Insira a descrição da imagem aqui

2. Uso

2.1 Faça login via psql

Já que definimos

POSTGRES_USER: pg14
POSTGRES_PASSWORD: 123456

Então você pode fazer login usando o seguinte comando:

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

  • O -h aqui se refere ao endereço onde o pg está instalado.
  • -p número da porta, a configuração aqui é 5432
  • -d é o nome do banco de dados. Por padrão, uma biblioteca postgres será criada.
  • -U indica qual usuário usar para fazer login. O pg14 especificado durante a criação é usado aqui.
➜  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 fazer login localmente, você pode usar o IP padrão e o número da porta.

2.2 CRUD

Após fazer login, você precisa criar um banco de dados, criar uma tabela, CURD...

\l Listar todos os bancos de dados

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 Criar banco de dados

criar banco de dados 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 Criar tabela e excluir tabela

CRIAR TABELA EMPRESA (
ID INT CHAVE PRIMÁRIA NÃO NULO,
NOME TEXTO NÃO NULO,
IDADE INT NÃO NULO,
ENDEREÇO ​​CHAR(50),
SALÁRIO 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 Operações 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. Permissões

Criar usuários e conceder permissões; revogar permissões e excluir usuários;

CRIAR teste de USUÁRIO COM SENHA '123456';
GRANT ALL ON great_company para testar;
revogar tudo em great_company do teste;
descartar teste de usuário;

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 coluna única

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

O uso de índices exclusivos não é apenas para desempenho, mas também para integridade de dados. Um índice exclusivo não permite a inserção de valores duplicados na tabela.

CREATE UNIQUE INDEX index_name
on table_name (column_name);

4.4 Quando você deve evitar o uso de índices?

Embora o objetivo dos índices seja melhorar o desempenho do banco de dados, há diversas situações em que os índices devem ser evitados.

Ao usar índices, considere as seguintes diretrizes:

Os índices não devem ser usados ​​em tabelas menores.
Os índices não devem ser usados ​​em tabelas que passam por operações frequentes de atualização ou inserção de grandes volumes.
Os índices não devem ser usados ​​em colunas que contenham um grande número de valores NULL.
Os índices não devem ser usados ​​em colunas operadas com frequência.

5. Instrução TRUNCATE

O objetivo da instrução TRUNCATE TABLE é limpar o conteúdo da tabela. A instrução DELETE sem cláusula condicional WHERE também significa limpar o conteúdo da tabela.A julgar pelos resultados da execução, os dois implementam a mesma função, mas os princípios de sua implementação são diferentes. A instrução TRUNCATE TABLE é uma instrução DDL, que é uma instrução de definição de dados. É equivalente a redefinir uma nova tabela e descartar diretamente o conteúdo da tabela original, então TRUNCATE TABLE será executado muito rapidamente; enquanto a instrução DELETE é um DML instrução, podemos pensar nela como A instrução DELETE exclui os dados um por um, portanto, a instrução DELETE é executada lentamente ao excluir várias linhas de dados.

6. Desative o envio automático

Desative a função autocommit no psql

\set AUTOCOMMIT off

"AUTOCOMMIT" neste comando está em letras maiúsculas e letras minúsculas não podem ser usadas. Se forem usadas letras minúsculas, nenhum erro será relatado, mas a operação de desligar o envio automático será inválida.

Acho que você gosta

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