马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
PostgreSQL简介
PostgreSQL 是一个功能强盛、开源的关系型数据库管理体系(RDBMS),以其可靠性、功能丰富性和可扩展性而闻名。它支持复杂的查询、事件完备性、并发控制以及多种数据范例和扩展功能,实用于各种规模的应用步伐; 实用传统的IT服务体系关系型数据库开辟与应用,也实用于互联网行业高并发、大数据量存储等数据需求;Portainer拉取镜像
在Portainer平台Images界面Image的文本框中输入postgres:16.6,点击Pull the image即开始远程到(Docker Hub)中央堆栈拉取image镜像文件,如果不确定可用的镜像版本有哪些,可以点击Search跳转到docker官方中央堆栈平台,检索postgres干系资源与可用tags标签;进入postgres镜像资源详情页,展示了全部可用版本tags标签以及官方提供的Dockerfile版本;根据我们的须要来选择,本文中选择的是16.6版本;当在Portainer平台Images界面中乐成拉取postgres:16.6镜像后,我们就可以在Containers中快速创建postgres数据库的docker容器体系;创建Docker容器
拉取Postgres镜像后,可直接在Portainer平台上创建docker容器运行应用服务;在左侧Containers页面点击Add container,进入创建容器设置页,在Image中输入:postgres:16.6,设置映射端口Port mapping:5432》5432在Volumes中设置docker服务主机与docker容器中映射的卷目次,此中container指docker容器内目次,host指docker服务主机物理目次,用于Postgresql运行产生的数据目次举行容器外维护,防止容器故障数据丢失;注意:docker容器非常恰当无状态服务,但对于具有产生数据的有状态服务,如:数据库、消息队列等,肯定要创建dokcer容器映射卷目次,将数据同步到docker服务主机的物理目次中;设置postgres服务运行参数,可通过添加docker容器内体系服务的情况变量来设置,如:POSTGRES_USER=root(数据库用户名),POSTGRES_PASSWORD=123456(数据库暗码)在Portainer平台上默认创建的docker容器没有CPU、内存等资源限定,当多个服务运行时,会存在资源占用过高与竞争,从而影响到全部Docker服务主机上容器与步伐,因此我们须要在Runtime & resources中举行资源限定;
- Memory reservation(MB):体现预留内存,应用运行过程中须要从内存中互换到磁盘的缓存空间,少于Memory limit即可;
- Memory limit(MB):体现内存利用最大限定,需大于Memory reservation;
- Maximum CPU usage:体现CPU利用量限定;
固然上述操纵,也可以通过docker run下令行的方式,分配固定的资源空间,来创建postgres数据库容器;- docker run -d \
- --name postgres-16.6 \
- -c 2 -m 1G --memory-swap=1536m \
- -p 5432:5432 \
- -e POSTGRES_PASSWORD=123456 \
- -e POSTGRES_USER=root \
- -v /opt/docker/sysdata/postgre_data/16/data:/var/lib/postgresql/data \
- postgres:16.6
复制代码 通过docker run下令创建基于postgres:16.6镜像为底子的数据库容器;
此中通过-c和-m、--memory-swap限定运行可用的cpu数目、内存巨细、可互换缓存巨细;通过-e来添加docker容器体系中的情况变量,体现创建数据库默认初始化用户,POSTGRES_USER=root(数据库用户名),POSTGRES_PASSWORD=123456(数据库暗码);因测试情况资源有限,此处只分配了2cpu、1g内存、总计1.5G最大内存互换空间(可缓存到磁盘的缓冲空间);需注意的是:在PostgreSQL中,并没有传统意义上的“root”用户,这是与MySQL等其他数据库体系的一个显着差异。在 PostgreSQL 中,全部用户都是基于脚色的,而这些脚色被赋予差异的权限。因此用户名虽为root,实际为平常账户,非超等管理员账户;实行后,无报错并乐成返回容器ID;在Portainer中的Containers界面革新后,即可看到我们创建的postgres-16.6容器正在运行中的,而且可以通过此界面功能管理postgres数据库运行、制止、重启、停息等,以及查察docker容器详情、容器删除、容器状态监控 等;容器内sql测试
在docker服务主机上,通过docker exec -it <容器ID> /bin/base,进入已安装Postgres数据库的docker容器体系中,查察容器文件信息;在当前容器体系中测试数据库SQL语句,实行psql,由于默认就是超等管理账户访问,因此无需用户名和暗码就可以直接进入到postgres数据库中;
以下为数据库测试利用语句- --查看所有库实例
- \l
- -- 创建新数据库,注意:psql中没有mysql中传统意义的"root"账户,此root只是单纯在数据库上已建用户而已
- CREATE DATABASE mydb OWNER root;
-
- -- 给用户授权,相关权限:https://www.runoob.com/postgresql/postgresql-privileges.html
- GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
-
- -- 连接到数据库
- \c mydb
-
- -- 创建表
- CREATE TABLE users (
- id SERIAL PRIMARY KEY,
- username VARCHAR(50),
- email VARCHAR(255)
- );
-
- -- 查询已建的表
- \dt
- -- 或
- SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
-
- -- 插入数据
- INSERT INTO users (username, email) VALUES ('admin', '[email protected]');
-
- -- 查询数据
- SELECT * FROM users;
-
- -- 更新数据
- UPDATE users SET email = '[email protected]' WHERE username = 'admin';
-
- -- 删除数据
- DELETE FROM users WHERE username = 'admin';
-
- -- 退出命令行
- \q
复制代码 以下是数据库SQL语句实行日记- root@0e7ec34ert42:/# psql
- psql (16.6 (Debian 16.6-1.pgdg120+1))
- Type "help" for help.
- root=# \l
- List of databases
- Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
- -----------+-------+----------+-----------------+------------+------------+------------+-----------+-------------------
- postgres | root | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
- root | root | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
- template0 | root | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/root +
- | | | | | | | | root=CTc/root
- template1 | root | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/root +
- | | | | | | | | root=CTc/root
- (4 rows)
- root=# \dt
- Did not find any relations.
- root=# select version();
- version
- ---------------------------------------------------------------------------------------------------------------------
- PostgreSQL 16.6 (Debian 16.6-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
- (1 row)
- root=# CREATE DATABASE mydb OWNER root;
- CREATE DATABASE
- root=# GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
- GRANT
- root=# \c mydb
- You are now connected to database "mydb" as user "root".
- mydb=# CREATE TABLE users (
- id SERIAL PRIMARY KEY,
- username VARCHAR(50),
- email VARCHAR(255)
- );
- CREATE TABLE
- mydb=# \dt
- List of relations
- Schema | Name | Type | Owner
- --------+-------+-------+-------
- public | users | table | root
- (1 row)
- mydb=# SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
- schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
- ------------+-----------+------------+------------+------------+----------+-------------+-------------
- public | users | root | | t | f | f | f
- (1 row)
- mydb=# INSERT INTO users (username, email) VALUES ('admin', '[email protected]');
- INSERT 0 1
- mydb=# SELECT * FROM users;
- id | username | email
- ----+----------+-------------------
- 1 | admin | [email protected]
- (1 row)
- mydb=# UPDATE users SET email = '[email protected]' WHERE username = 'admin';
- UPDATE 1
- mydb=# select * from information_schema.table_privileges where table_name = 'users';
- grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy
- ---------+---------+---------------+--------------+------------+----------------+--------------+----------------
- root | root | mydb | public | users | INSERT | YES | NO
- root | root | mydb | public | users | SELECT | YES | YES
- root | root | mydb | public | users | UPDATE | YES | NO
- root | root | mydb | public | users | DELETE | YES | NO
- root | root | mydb | public | users | TRUNCATE | YES | NO
- root | root | mydb | public | users | REFERENCES | YES | NO
- root | root | mydb | public | users | TRIGGER | YES | NO
- (7 rows)
- mydb=# \q
复制代码 进入到docker容器体系的postgres数据库安装目次/var/lib/postgresql/data中,此时已天生数据库干系设置与文件;
通过DBeaver数据库客户端工具,远程乐成访问到Postgres数据库后,即可实行SQL操纵了; |