美文网首页
macOS安装PostgreSQL数据库

macOS安装PostgreSQL数据库

作者: 遥遥领先M | 来源:发表于2017-08-22 22:53 被阅读148次
安装PostgreSQL

使用homebrew安装,终端执行以下命令:

brew install postgresql

查看安装的版本:

psql --version

启动停止重启服务:

// 后台启动postgresql
brew services start postgresql
// 前台启动
postgres -D /usr/local/var/postgres
// 停止postgresql
brew services stop postgresql
// 重启postgresql
brew services restart postgresql

这样我们就在终端中启动了postgres服务。

设置开机自动启动

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
卸载postgreSQL

当然是对于用homebrew安装的,才能这样卸载:

 brew uninstall postgres

取消开机启动服务(如果配置了):

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm -rf ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

好了,到这里基本的安装以及配置服务都已经完成了。

创建用户

createuser root -P

创建数据库:

createdb test
连接数据库

输入如下指令,连接数据库:

psql postgres

比较实用的命令:

\q 退出
\l 显示数据库
\dg 显示当前用户
\dp 显示当前数据库中表、视图及其权限等
\dt 显示当前数据库中的表
\d TABLENAME 查看表结构
安装pgAdmin4

先下载安装pgAdmin4,然后连接我们本地的PostgreSQL服务器。
打开pgAdmin4,选择Servers ->Create ->Server

屏幕快照 2017-08-21 14.33.39.png

填写General然后保存


屏幕快照 2017-08-21 14.38.33.png

填写Connection,数据库填写前面创建的users,用户名和密码用你自己的(数据库的用户可以自己添加,默认是当前电脑用户)。然后点击Save。


屏幕快照 2017-08-21 14.39.08.png
获取postgresql-provider

在Package.swift中添加依赖库:

import PackageDescription

let package = Package(
    name: "OneVideo-Vapor",
    targets: [
        Target(name: "App"),
        Target(name: "Run", dependencies: ["App"]),
    ],
    dependencies: [
        .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 2),
        .Package(url: "https://github.com/vapor/fluent-provider.git", majorVersion: 1),
        .Package(url: "https://github.com/vapor/postgresql-provider.git", majorVersion: 2, minor: 0)
    ],
    exclude: [
        "Config",
        "Database",
        "Localization",
        "Public",
        "Resources",
    ]
)

添加之后我们需要重新打开Xcode来获取依赖包:

vapor xcode -y
引用Provider

现在相当于我们只是“下载”了新的 Provider,想要使用它,你还需要在系统中对 Provider 进行“注册”,以便你的系统能够加载这个 Provider。 Provider 的注册工作统一在 Config+Setup.swift 文件中进行,模板工程已经为你配置好了 FluentProvider。由于 Provider 不是系统原生的,所以需要在文件中先

import PostgreSQLProvider

然后在 setupProviders() 方法中加入新的 Provider:

    /// Configure providers
    private func setupProviders() throws {
        try addProvider(FluentProvider.Provider.self)
        try addProvider(PostgreSQLProvider.Provider.self)

    }
配置PostgresSQL

我们需要对Postgres-Provider进行配置。按照READ ME进行配置,在Config目录下创建文件夹secrets,然后在secrets文件夹下创建postgresql.json文件,并添加如下代码:

{
    "hostname": "127.0.0.1",
    "user": "nnianhou",
    "password": "123456",
    "database": "srsq",
    "port": 5432
}

使用 Fluent 提供的便捷方法来操作数据库,Fluent 默认会把数据保存在内存中,所以你需要把 Fluent 的数据驱动改为 postgresql。打开 Config\fluent.json 文件,修改如下所示的地方(必须吐槽一下,这个太不明显了):

063ADC9C-0C68-46E9-95A5-2A7A1A5FAFE3.png

数据库的配置就完成了

使用PostgresSQL

创建对应的Festival或Event文件,放到 Models 目录下,注意一下文件头部的引用,在 Vapor 中定义模型,需要引入:

import Vapor
import FluentProvider
import HTTP

Swift 对模型的操作都是通过扩展协议完成的,你可以参考 Post.swift 这个文件。Vapor 中的模型要比客户端中的模型复杂的多,首先为了匹配 Fluent,需要把模型定义成 class,并且遵守 Model 协议,然后实现下面的方法和构造器:

final class Festival:Model{
    var date:String
    var name:String
 
    let storage = Storage()
    /// 常规的构造器
    init(date: String,name:String) {
        self.date = date
        self.name = name
    }
 
    // MARK: Fluent 序列化构造器
 
    /// 通过这个构造器你可以使用数据库中的一行生成一个对应的对象
    init(row: Row) throws {
        date = try row.get("date")
        name = try row.get("name")
    }
 
    // 把一个对象存储到数据库当中
    func makeRow() throws -> Row {
        var row = Row()
        try row.set("date", date)
        try row.set("name", name)
        return row
    }
 
}

Vapor 为你提供了通过模型快速建表的方法。依旧通过协议扩展的方式:

extension Festival:Preparation {
   static func prepare(_ database: Database) throws {
       try database.create(self, closure: { festivals in
           festivals.id()
           festivals.string("date")
           festivals.string("name")
       })
   }

   static func revert(_ database: Database) throws {
       try database.delete(self)
   }
}

有时候我们希望在 response 中可以看到新建的对象的具体信息。但是在配置路由时,需要返回的是 JSON 字符串,而不是一个 Swift 对象。此时你需要把 Swift 对象转换成一个 JSON 串,依旧是依赖协议扩展:

extension Festival: JSONRepresentable {
   func makeJSON() throws -> JSON {
       var json = JSON()
       try json.set("id", id)
       try json.set("name", name)
       try json.set("date", date)
       return json
   }
}

和 Provider 一样,Vapor 只会操作所有“注册”过的 Preparation,所以下一步是把 Festival 注册到系统中,打开 Config+Setup.swift 文件,在对应的方法中注册:

private func setupPreparations() throws { 
   preparations.append(Post.self) 
   preparations.append(Festival.self) 
}

当你通过 Fluent 对 Festival 进行增删改查的时候,如果数据库没有中没有对应的表,则会自动为你创建该表,现在让我们在 Routes.swift 写一个 Post 方法来测试一下:

post("festivals"){ req in
   let text = Festival(date: "1月1日", name: "国庆节")
   try text.save()
   return try text.makeJSON()
}

我更推荐使用 postman,发起一个 post 请求。在 postman 中输入请求的地址,发起请求,可以看到返回了 JSON数据:


屏幕快照 2017-08-22 23.49.13.png

现在打开你的数据库看一下吧,在刚才的请求过程中,Vapor 自动为你创建了三张表.

注意

错误

Error could not connect to server: Connection refused Is the server running on port 5432?

Stop manually:
pg_ctl -D /usr/local/var/postgres stop -s -m fast

Start manually:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

相关文章

网友评论

      本文标题:macOS安装PostgreSQL数据库

      本文链接:https://www.haomeiwen.com/subject/mywcdxtx.html