拉取最新版本的 PostgreSQL 镜像:
$ sudo docker pull postgres:latest
在本地预先创建好 data
目录, 用于映射 PostgreSQL 容器内的 /var/lib/postgresql/data
目录。
使用以下命令来运行 PostgreSQL 容器:
$ sudo docker run -itd --name postgres -e POSTGRES_PASSWORD=连接PostgreSQL的密码 -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5432:5432 -v /home/ubuntu/docker/postgres/data:/var/lib/postgresql/data postgres:latest
-
-itd
(以交互的方式,新建一个模拟终端运行容器)-
-i
(在后台运行容器,并且打印容器ID) -
-t
(分配一个伪TTY) -
-d
(保持STDIN打开状态)
-
-
--name
(给容器起一个名字方便管理) -
-e POSTGRES_PASSWORD=连接PostgreSQL的密码
(设置环境变量, 指定连接PostgreSQL的密码) -
-e ALLOW_IP_RANGE=0.0.0.0/0
(设置环境变量, 允许所有IP访问) -
-p 5432:5432
(将容器的5432端口映射到主机的5432端口) -
-v /home/ubuntu/docker/postgres/data:/var/lib/postgresql/data
(文件挂载目录)
通过 docker ps
命令查看容器的运行信息:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd7e0efc8e5b postgres:latest "docker-entrypoint.s…" 36 seconds ago Up 35 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp postgres
进入和退出 PostgreSQL 容器:
$ sudo docker exec -it postgres /bin/bash
root@xxx:/# exit
切换当前用户为 postgres
用户, 登录数据库:
$ sudo docker exec -it postgres /bin/bash
root@xxx:/# su postgres
postgres@xxx:/$ psql
psql (16.0 (Debian 16.0-1.pgdg120+1))
Type "help" for help.
postgres=# exit
需要退出时, 使用 exit
一层一层的退出。
用户管理
查看当前用户信息:
postgres=# SELECT * FROM pg_user;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
postgres | 10 | t | t | t | t | ******** | |
(1 rows)
创建用户
命令 CREATE USER 定义一个新的数据库角色:
postgres=# CREATE USER 用户名称 WITH PASSWORD '用户密码';
CREATE ROLE
删除用户
命令 DROP USER 移除一个数据库角色:
postgres=# DROP USER 用户名称;
DROP ROLE
数据库管理
查看当前数据库信息:
postgres=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
(3 rows)
进入某个数据库:
postgres=# \c 数据库名称
You are now connected to database "数据库名称" as user "postgres".
数据库名称=#
创建数据库
命令 CREATE DATABASE 创建一个新数据库:
postgres=# CREATE DATABASE 数据库名称 OWNER 拥有该数据库的用户名称;
CREATE DATABASE
数据库权限
命令 GRANT 定义访问特权:
postgres=# GRANT ALL PRIVILEGES ON DATABASE 数据库名称 TO 用户名称;
GRANT
删除数据库
命令 DROP DATABASE 移除一个数据库:
postgres=# DROP DATABASE 数据库名称;
DROP DATABASE
用户登录
$ sudo docker exec -it postgres /bin/bash
root@xxx:/# psql -U 用户名称 -W -d 数据库名称
Password:
psql (16.0 (Debian 16.0-1.pgdg120+1))
Type "help" for help.
数据库名称=>
表管理
查看当前数据库中的所有表信息:
=> \d
List of relations
Schema | Name | Type | Owner
--------+-------+-------+---------
public | 表名称 | table | 用户名称
(1 row)
创建表
命令 CREATE TABLE 定义一个新表:
=> CREATE TABLE 表名称 (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL
);
CREATE TABLE
删除表
命令 DROP TABLE 移除一个表:
=> DROP TABLE 表名称;
DROP TABLE
网友评论