1、PostgreSQL 數(shù)據(jù)庫(kù)入門(mén)

本文實(shí)踐環(huán)境

  • macOS Mojave 10.14.6
  • docker 19.03.1
  • docker-compose 1.24.1
  • node 11.10.1

什么是 PostgreSQL ?

PostgreSQL簡(jiǎn)稱(chēng)PG,是一款功能強(qiáng)大且開(kāi)源免費(fèi)的關(guān)系型數(shù)據(jù)庫(kù)。它支持大部分 SQL 標(biāo)準(zhǔn)并且提供了許多現(xiàn)代特性:

  • 復(fù)雜查詢
  • 外鍵
  • 觸發(fā)器
  • 可更新視圖
  • 事務(wù)完整性
  • 多版本并發(fā)控制

同樣,PostgreSQL可以用許多方法擴(kuò)展,比如, 通過(guò)增加新的:

  • 數(shù)據(jù)類(lèi)型
  • 函數(shù)
  • 操作符
  • 聚集函數(shù)
  • 索引方法
  • 過(guò)程語(yǔ)言

docker 安裝

在項(xiàng)目根目錄下新建一個(gè) docker-compose.yml 文件:

version: '3'

services:
    postgres:
        container_name: pg
        image: postgres:9.6  # 使用的是 9.6 版本的 pg 數(shù)據(jù)庫(kù)
        restart: always
        ports:
            - '54321:5432'   # 把容器的 5432 端口映射到本機(jī)的 54321端口
        environment:
            POSTGRES_PASSWORD: 123456 # 設(shè)置 postgres 用戶的默認(rèn)密碼
        volumes:
            - ./.docker/postgres-data:/var/lib/postgresql/data  # 把數(shù)據(jù)庫(kù)目錄掛載出來(lái)

讓pg數(shù)據(jù)庫(kù)服務(wù)在后臺(tái)運(yùn)行

 $ docker-compose up -d

查詢?nèi)萜鬟\(yùn)行情況

$ docker ps

嘗試登錄數(shù)據(jù)庫(kù)

$ docker exec -it ${容器ID} psql -U postgres
image.png

什么是 psql ?

psql 是 pg 數(shù)據(jù)庫(kù)中的一個(gè)命令行交互式客戶端工具
使用 psql 連接數(shù)據(jù)庫(kù)的方法:
psql -h <hostname or ip> -p <端口> [數(shù)據(jù)庫(kù)名稱(chēng)] [用戶名稱(chēng)]

這些連接參數(shù)也可以用環(huán)境變量指定,比如:

  • export PGDATABASE=testdb
  • export PGHOST=127.0.0.1
  • export PGPORT=5432
  • export PGUSER=postgres

psql 的常用命令

psql 的命令都是以斜杠 \ 開(kāi)頭的。
\h 查看幫助信息
\l 查看所有數(shù)據(jù)庫(kù)
\q 退出 psql
\d [ pattern ] 該命令將顯示每個(gè)匹配關(guān)系(表、視圖、索引、序列)的信息,可以加上 + 查看更多的信息,如 \d+

  1. 不加任何參數(shù)表示查看當(dāng)前數(shù)據(jù)庫(kù)的所有表。

  2. \d tablename 后面跟一個(gè)表名,表示顯示這個(gè)表的結(jié)構(gòu)定義

  3. \d indexname 也可以顯示索引的信息,如 \d 索引名稱(chēng)

  4. \d * 后面也可以跟通配符如 *?\d x*

  5. \d+將顯示比 \d 更詳細(xì)的信息,還會(huì)顯示任何與表關(guān)系的注釋?zhuān)约氨碇谐霈F(xiàn)的 OID

\dt 只顯示匹配的表
\di 只顯示索引
\ds 只顯示序列
\dv 只顯示視圖
\df 只顯示函數(shù)

  1. \timing on\timing off 顯示 SQL 已執(zhí)行的時(shí)間,默認(rèn)情況下是 off

  2. \dn 列出所有的 schema

  3. \du\dg 列出所有的數(shù)據(jù)庫(kù)用戶和角色

  4. \db 顯示所有的表空間,表空間其實(shí)是一個(gè)目錄,放在這個(gè)表空間的表,就是把表的數(shù)據(jù)文件發(fā)到這個(gè)表空間下。

  5. \dp\z 顯示表的權(quán)限分配情況

  6. \encoding 指定客戶端的字符編碼,如 \encoding UTF8;

  7. \pset 設(shè)置輸出的格式,\pset border 0 : 表示輸出內(nèi)容無(wú)邊框。 border 1 :表示邊框只在內(nèi)部。border 2 : 內(nèi)外都有邊框

  8. \x 把表中的每一行的每列數(shù)據(jù)都拆分為單行展示,與 MySQL 中的 \G 的功能類(lèi)似。

  9. \echo 用于輸出一行信息,通常用于在 .sql 文件中輸出一些提示信息。

  10. \password 設(shè)置密碼

  11. \conninfo 列出當(dāng)前數(shù)據(jù)庫(kù)連接的信息

  12. \dx 查看數(shù)據(jù)庫(kù)中安裝的擴(kuò)展 或 select * from pg_extension;

執(zhí)行存儲(chǔ)在外部文件中的 SQL 命令

\i <文件名> 執(zhí)行存儲(chǔ)在外部文件中的 sql 語(yǔ)句
當(dāng)然也可以在 psql 命令行加 -f <filename> 來(lái)執(zhí)行 SQL 腳本文件中的命令,如 psql -f ./test.sql

psql 的使用技巧和注意事項(xiàng)

  1. 在啟動(dòng) psql 命令后中加 "-E" 參數(shù),就可以把 psql 中各種以 "" 開(kāi)頭的命令執(zhí)行的實(shí)際 SQL 打印出來(lái),如下 psql -E postgres,如果想關(guān)閉此功能,可以使用 \set ECHO_HIDDEN on | off

  2. 自動(dòng)提交方面的技巧

psql 中的事務(wù)是自動(dòng)提交的,可以運(yùn)行 begin; 然后執(zhí)行 dml 語(yǔ)句,最后再執(zhí)行 commit 或 rollback 語(yǔ)句。或 直接使用 psql 中的命令關(guān)閉自動(dòng)提交的功能。\set AUTOCOMMIT off

  1. 查看數(shù)據(jù)庫(kù)、表、索引大小
  select pg_size_pretty(pg_table_size('test'));   
  select pg_size_pretty(pg_database_size('david'));
  select pg_size_pretty(pg_indexes_size('test')); 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容