Vapor奇幻之旅(06 PostgreSQL)
用Vapor連線資料庫是一件令人興奮的事,本篇就來介紹如何使用Vapor來連線PostgreSQL資料庫,將資料持久化。
在上一篇Vapor奇幻之旅(05 Fluent)中,我介紹瞭如何使用Fluent建立資料模型,並在自帶的記憶體資料庫中進行增刪改查操作。用這種方法可以方便的進行介面測試和資料測試,不需要額外部署資料庫環境,對於除錯程式和測試來說好處不言而喻。而在web應用的使用中,對資料的持久化是必不可少的,於是我們就需要通過程式來連線資料庫進行資料操作,這樣整個系統才算基本完整。
什麼是PostgreSQL?
PostgresSQL是一個開源的物件導向的資料庫,百度百科上的介紹非常不準確,英文好的朋友還是建議看官方文件:
PostgreSQL 10
PostgreSQL 9.6
這裡不詳細解釋資料庫的用法,我給出一些主要特性:
- 複雜查詢
- 支援外來鍵
- 觸發器
- 可更新檢視
- 事務完整
- 多版本併發控制
PostgreSQL同樣具有非常靈活的可擴充套件性,支援大部分的sql標準, 再加上是開源並免費的,所以適用於任何用途,總的來說就是好用不上火。
關於資料庫的用法這篇文章不會覆蓋太多,感興趣的朋友可以去看看相關的文章。
安裝PostgreSQL
官方給出的安裝方法:
在ubuntu上安裝
在Mac上安裝
下面是安裝步驟
-
ubuntu14.04:
1、建立檔案/etc/apt/sources.list.d/pgdg.list 並新增以下內容
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
2、安裝
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
-
ubuntu16.04:
1、建立檔案/etc/apt/sources.list.d/pgdg.list 並新增以下內容
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
2、安裝
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
由於ubuntu系統中預設root沒有許可權操作postgreSQL,需要切換到postgres這個使用者才能訪問
$ sudo su - postgres
測試是否安裝成功:
$ psql --help
- Mac:
簡單粗暴:
$ brew install postgresql
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
$ postgres -D /usr/local/var/postgres
測試是否安裝成功:
$ psql --help
啟動和停止:
// 停止postgresql
$ brew services stop postgresql
// 啟動postgresql
$ brew services start postgresql
現在PostgreSQL已經安裝好了,下面是幾個基本操作:
建立資料庫:
$ createdb mydb
進入我的資料庫:
psql mydb
這時候你就可以在裡面執行sql了,記得輸入命令後加上分號(;),否則回車代表換行。
圖形化工具pgAdmin
1、下載安裝pgAdmin
2、新增一個新的server:
3、指定一個server的名稱:
4、配置connection
5、包促進配置,如果成功就會連線資料庫,如果沒有成功,請檢查配置是否正確,成功後我們就可以看到我們的資料庫被成功新增了
專案中新增PostgreSQL Provider
修改前一篇文章專案中的Package.swift:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "VaporPostgreSQL",
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),
.package(url: "https://github.com/vapor-community/postgresql-provider.git", .upToNextMajor(from: "2.1.0"))
],
targets: [
.target(
name: "App",
dependencies: ["Vapor", "FluentProvider", "PostgreSQLProvider"],
exclude: ["Config", "Database", "Localization", "Public", "Resources"]
),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])
]
)
命令列到專案資料夾,更新vapor:
$ vapor update
待完成之後專案裡就會整合 PostgreSQL Provider
如果此時執行程式,會報找不到CPostgreSQL,我們需要新增這個lib的支援:
$ brew install postgresql pkg-config
在linux環境下執行:
apt-get update
apt-get upgrade
apt-get install postgresql postgresql-contrib
這樣這個c庫就下載下來了
配置PostgreSQL Provider
1、在Config+Setup.swift中新增provider
import PostgreSQLProvider
...
/// Configure providers
private func setupProviders() throws {
try addProvider(FluentProvider.Provider.self)
try addProvider(PostgreSQLProvider.Provider.self)
}
2、修改驅動:
在專案Config/fluent.json中修改driver屬性(預設是memory):
"driver": "postgresql"
3、配置連線:
建立Config/secrets/postgresql.json檔案,在config資料夾下先建立secrets資料夾,再建立postgresql.json檔案,並新增配置內容:
{
"hostname": "127.0.0.1",
"user": "leacode",
"password": "12345",
"database": "leacode",
"port": 5432
}
也可以用url的形式來寫這個配置檔案
{
"url": "psql://leacode: 12345@127.0.0.1:5432/leacode"
}
這時候執行程式,執行Vapor奇幻之旅(05 Fluent)中的增刪改查操作,可以看到和上一篇一樣的效果,到這裡,我們的資料庫已經連線完成。
背後發生了什麼?
PostgreSQL Provider為我們提供了連線到資料庫的driver,就像pgAdmin 4一樣使我麼你的程式能夠連線到資料庫進行相應的操作。
Fluent通過我們寫的Preparation來準備資料庫的表:
extension Quotes: Preparation {
static func prepare(_ database: Database) throws {
try database.create(self) { quotes in
quotes.id()
quotes.string("author")
quotes.string("content")
quotes.string("description")
}
}
static func revert(_ database: Database) throws {
try database.delete(self)
}
}
通過pgAdmin可以檢視Fluent到底建立了什麼表:
看看fluent表裡有些什麼
可以看到fluent表中包含我們建立的物件,其中Post是建立程式預設的model,可以刪掉,Quotes是我們自定義的一個model,至此我們在沒有寫一句sql的情況下建立了資料庫的表,並完成了增刪改查操作。
現在,當我們重新執行程式並執行查詢操作時,可以發現上一次執行插入的資料依然存在,我們完成了資料的持久化。
後面我會補充一篇文章講解服務端資料庫的配置,關於Vapor其他知識,可以參考以下文章:
Vapor奇幻之旅(01開始)
Vapor奇幻之旅(02部署)
Vapor奇幻之旅(03上手)
Vapor奇幻之旅(04Routing)
Vapor奇幻之旅(05 Fluent)
Vapor奇幻之旅(06 PostgreSQL)
Vapor奇幻之旅(07 連線服務端PostgreSQL)
Vapor奇幻之旅(08 連線服務端MongoDB)
Vapor奇幻之旅(09 連線MySQL)
希望你對我的教程能夠喜歡,你們的贊是我持續的動力,歡迎加入QQ群參與互動:431296189
相關文章
- Vapor奇幻之旅(05 Fluent)Vapor
- 程式碼界的超級英雄:GitHub的奇幻冒險之旅Github
- 聊聊 VaporVapor
- Java EE之旅06 XML基礎JavaXML
- 水壩水流3D視覺化:探索自然力量的數字奇幻之旅3D視覺化
- vapor fluent[sqlite] relationsVaporSQLite
- 搞事情之 Vapor 初探Vapor
- Vapor系列教程 - 介紹Vapor
- 重啟React Native老專案的奇幻之旅:填坑實錄與解決方案分享React Native
- Go的100天之旅-06陣列和SliceGo陣列
- 【計算講談社】第六講|三星堆奇幻之旅:只有雲端計算才能帶來的體驗
- PostgreSQL DBA(106) - pgAdmin(Don't do this:NOT IN)SQL
- Vapor如何配置MySQL資料庫VaporMySql資料庫
- Swift 版本的 Laravel:Vapor 簡介SwiftLaravelVapor
- Vapor文件學習廿八: HTTP -ResponseVaporHTTP
- Swift Web 開發之 Vapor – 路由(二)SwiftWebVapor路由
- Vapor 2.0 - MySQL提供程式(MySQL Provider)VaporMySqlIDE
- 創意無限,視覺絢麗—開啟Adobe After Effects 2024(Ae2024)的奇幻之旅視覺
- Swift Web 開發之 Vapor – 模版 Leaf(三)SwiftWebVapor
- 服務端Swift - Vapor2.0介紹服務端SwiftVapor
- Laravel 生態系統Forge Vapor Nova EnvoyerLaravelVapor
- PostgreSQL與12306搶火車票的思考SQL
- Swift vapor3 - Async-非同步處理SwiftVapor非同步
- 奇幻RPG(人物構建 與 Abstract Factory模式)模式
- 智慧體的奇幻漂流之“成都摺疊”篇智慧體
- Swift web服務框架Vapor 學習資源整理SwiftWeb框架Vapor
- ServerSide - 01-Vapor在mac下的安裝ServerIDEVaporMac
- 上雲十年:阿里雲的奇幻漂流阿里
- 使用 Swift 和 Vapor 構建區塊鏈伺服器SwiftVapor區塊鏈伺服器
- 《Devil’s Hunt》:如何將奇幻小說改編為遊戲大作dev遊戲
- 黑客組織“奇幻熊”入侵國際田聯絡統黑客
- 函數語言程式設計之Promise的奇幻漂流函數程式設計Promise
- PostgreSQL 原始碼解讀(106)- WAL#3(Insert & WAL-heap_i...SQL原始碼
- 從難民到遊戲公司CEO,非洲遊戲人的奇幻漂流遊戲
- 《緋石之心》世界觀詳解 奇幻冒險即刻啟航
- 智子: Vue Vapor年底釋出alpha版本,如果有資金支援VueVapor
- Hugo 之旅Go
- 在喬治亞,做一款奇幻風格的電子遊戲遊戲