1、访问https://hub.docker.com/,查看镜像postgres
2、拉取镜像
docker pull postgres:11.9
3、创建本地卷,数据卷可以在容器之间共享和重用,默认会一直存在,即使容器被删除(docker volume inspect
pgdata可查看数据卷的本地位置)
docker volume create pgdata
4、启动容器
docker run --name postgres11 -e POSTGRES_PASSWORD=postgres -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:11.9
说明:
run,创建并运行一个容器;
--name,指定创建的容器的名字;
-e POSTGRES_PASSWORD=password,设置环境变量,指定数据库的登录口令为postgres;postgres镜像默认的用户名为postgres
-p 54321:5432,端口映射将容器的5432端口映射到外部机器的54321端口;
-d postgres:9.4,指定使用postgres:9.4作为镜像。
-v 将数据存储到宿主机服务器
5、查看容器
docker ps
6、进入容器
docker exec -it 100e0e50d7ca /bin/bash
7、创建用户和数据库
# su - postgres -- 首先切换到postgres
-bash-4.1$ psql -- 输入psql
psql (10.5)
Type "help" for help.
postgres=#
创建用户
postgres=# create user username with password '****';
CREATE ROLE
postgres=#
需要注意:
1. 要以英文分号结尾
2.密码需要引号包裹
创建数据库
postgres=# create database dbtest owner username; -- 创建数据库指定所属者
CREATE DATABASE
postgres=#
将数据库得权限,全部赋给某个用户
postgres=# grant all on database dbtest to username; -- 将dbtest所有权限赋值给username
GRANT
postgres=#
8、使用navicat连接
8、数据库导入
导入整个数据库
psql -U username databasename < /data/dum.sql -- 用户名和数据库名
9、使用普用户创建数据库时候
PG::Error: ERROR: permission denied to create database
解决方式:
使用postgres 登录
su postgres
psql
postgres=# ALTER ROLE xxxx CREATEROLE CREATEDB;
xxxx: 普通用户名称
赋予超级权限
ALTER ROLE xxxx CREATEROLE SUPERUSER;
按照提示,我们应该使用跟模板数据库相同的collation,或者使用模板template0
postgres=# \l
其实我们可以看到template0和template1的collate是一样的,但template0允许建立不同的collation的库。
查询字符集支持的LC_COLLATE和LC_CTYPE信息
postgres=# select pg_encoding_to_char(collencoding) as encoding,collname,collcollate,collctype from pg_collation ;
解决方法
CREATE DATABASE test
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'C'
LC_CTYPE = 'C'
CONNECTION LIMIT = 1024
TEMPLATE template0;