当前位置:   article > 正文

使用 Docker 启动 PostgreSQL 服务 (选学)_docker 启动postgres

docker 启动postgres

企业真实的 Rails 项目,由于业务量大, SQLite 数据库不适合,所以我们需要一个性能和特性都符合企业级别的数据库,通常来说也就两个选择:PostgreSQL 和 MySQL。

不过 Rails 项目更喜欢使用 PostgreSQL,因为它更加稳定,更加安全,更加高效,更加可靠,特性也更加丰富。接下来我们主要学习 PostgreSQL 相关的知识。当你掌握了 PostgreSQL 后,只需要花费很少的时间就能掌握 MySQL。

参考文档

  1. http://www.postgres.cn/docs/13/index.html
  2. https://docs.docker.com/get-started/overview/

1 PostgreSQL 简介

  1. 何为 PostgreSQL?
    PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES, 版本 4.2 为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。

PostgreSQL 是最初的伯克利代码的开源继承者。它支持大部分 SQL 标准并且提供了许多现代特性:

  • 复杂查询
  • 外键
  • 触发器
  • 可更新视图
  • 事务完整性
  • 多版本并发控制

同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的:

  • 数据类型
  • 函数
  • 操作符
  • 聚集函数
  • 索引方法
  • 过程语言

并且,因为自由宽松的许可证,任何人都可以以任何目的免费使用、修改和分发 PostgreSQL, 不管是私用、商用还是学术研究目的。

PostgreSQL 是一个免费的对象 - 关系数据库服务器 (ORDBMS),在灵活的 BSD 许可证下发行。相比 SQLite 来说,PostgreSQL 的安装较为繁琐。

PostgreSQL 入门教程: http://www.postgres.cn/docs/13/tutorial-createdb.html

如果是在 Windows 或 macOS 上安装 PostgreSQL,下载对应的安装包即可,下载地址:

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
  • 1

由于企业主要是在 Linux 系统中安装 PostgreSQL,我们也打算在 Linux 上安装 PostgreSQL。但是对于初学者来时,安装及配置过程比较繁琐。我推荐使用
Docker 容器来安装 PostgreSQL,这样可以让你在 Linux 上安装 PostgreSQL,而不用担心安装及配置的繁琐问题了。

可以参考 https://docs.docker.com/engine/install/ubuntu/ 在 Ubuntu 系统中安装 Docker。

下一讲我们会总结介绍下 Docker。

# 源码
https://gitee.com/rails-train-camp01/db_basic/tree/master/303
  • 1
  • 2

1 新建一个空目录

比如 /docker_pg

2 添加文件

添加 /docker_pg/docker-compose.yml

version: '3.7'
services:
  postgres:
    image: postgres:13
    env_file: .env
    ports:
      - 5432:5432
    volumes:
    - ./data:/var/lib/postgresql/data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

添加 /docker_pg/.env

POSTGRES_HOST=127.0.0.1
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=test_db
POSTGRES_PORT=5434
  • 1
  • 2
  • 3
  • 4
  • 5

启动 Docker 引擎

sudo service docker start
  • 1

启动 PostgreSQL 服务

docker-compose up

# 或者以后台发服务的方式启动
docker-compose up -d
  • 1
  • 2
  • 3
  • 4

通过 VS Code 插件查看是否启动成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QikeyNh7-1638975183325)(img/docker_pg.jpg)]

可以使用如下 Ruby 脚本测试下 PostgreSQL 是否能正确连接

可以使用如下命令安装 pg gem。

gem install pg
  • 1

安装失败可以在学习群里 @我。

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )
  • 1
  • 2
  • 3

3 PostgreSQL 与 Ruby

  1. https://gems.ruby-china.com/gems/sqlite3
  2. https://gems.ruby-china.com/gems/pg

activerecord 是 Rails 内置的 ORM 库,支持常见的数据库,如 MySQL、SQLite、PostgreSQL、Oracle 等。

4 pg gem 使用示例

示例 1: pg_stat_activity

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )


conn.exec( "SELECT * FROM pg_stat_activity" ) do |result|
  puts "     PID | User             | Query"
  result.each do |row|
    puts " %7d | %-16s | %s " %
      row.values_at('pid', 'usename', 'query')
  end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

示例 2: 创建表

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "create table students ( name varchar(50), email varchar(50), grade varchar(5), blog varchar(50) )"
conn.exec(sql)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例 3: 插入数据

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "INSERT INTO students (name, email, grade, blog) VALUES ('Jane', 'me@janedoe.com', 'A', 'http://blog.janedoe.com')"

conn.exec(sql)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例 4: 更新数据

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "INSERT INTO students (name, email, grade, blog) VALUES ('Jane', 'me@janedoe.com', 'A', 'http://blog.janedoe.com')"

conn.exec(sql)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例 5: 查询数据

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "select * from students"

conn.exec(sql)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例 6: 删除数据

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "delete from students where name = 'Jane'"

conn.exec(sql)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5 ORM

对象关系映(英语:Object Relational Mapping,简称 ORM,或 O/RM,或 O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的 “虚拟对象数据库”。如今已有很多免费和付费的 ORM 产品,而有些程序员更倾向于创建自己的 ORM 工具。

简单说就是,ORM 就是把数据库的表结构和对象结构进行映射,从而使得程序员可以通过编程语言来操作数据库,而不需要知道数据库的细节。

假如我们有一张学生表,其创建 SQL 如下

  create table students (
    name varchar(50),
    email varchar(50),
    grade varchar(5),
    blog varchar(50)
  );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面我们使用 ruby 创建一个包含 students 表的 PostgreSQL 数据库。

require 'pg'

conn = PG.connect(host: '127.0.0.1', user: 'postgres', password: 'postgres', dbname: 'test_db' )

sql = "create table students (  id serial NOT NULL, name varchar(50), email varchar(50), grade varchar(5), blog varchar(50) )"
conn.exec(sql)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Ruby 中有很多 ORM 库,比如 ActiveRecord、Sequel。不过 Rails 默认使用的是 ActiveRecord,下面以 ActiveRecord 为例,我们来看看它的使用方法。

首先安装 activerecord。

gem install activerecord
  • 1

require 'pg'

require 'active_record'

ActiveRecord::Base.establish_connection(
  adapter:  'postgresql',
  host:     '127.0.0.1',
  username: 'postgres',
  password: 'postgres',
  database: 'test_db'
)

class Student < ActiveRecord::Base
end

# create
Student.create(name: 'peng', email: 'peng@qq.com')
# update

student = Student.first
student.name = 'peng2'
student.save

# read
student = Student.where(name: 'peng2').first
p student

# delete
student = Student.where(name: 'peng2').delete_all

p Student.all.count

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/464684
推荐阅读
相关标签
  

闽ICP备14008679号