psql基礎


postgres=/postgres-

表示你上一行輸入沒有完成(pythoner請記得在句尾加;!!!)

 

psql 是什么?

    psql 是 PostgreSQL 中的一個命令行交互式客戶端工具,

它允許你交互地鍵入 SQL 命令,然后把它們發送給 PostgreSQL 服務器,再顯示 SQL 或命令的結果。

輸入的內容允許來自一個文件,此外它還提供了一些元命令和多種類似 shell 的特性來實現書寫腳本,以及對大量任務的自動化工作。

 

特性:方便快捷、沒有圖形化工具使用上的一些限制

 

postgresql數據庫

最先進的開源關系型數據庫。

1. 安裝

1)創建 /etc/apt/sources.list.d/pgdg.list 並在文件中添加如下內容:

 # vi /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

3)安裝postgresql-10數據庫

 apt-get install postgresql-10

4)查看安裝是否成功

 netstat -tnulp | grep postgres

注:postgresql數據庫默認監昕端口為:5432

官網文檔鏈接: <https://www.postgresql.org/download/linux/ubuntu/>

2. 基本使用

1)啟動、停止、重啟

 systemctl start|stop|restart postgresql

2)相關目錄

 # congFile
 /etc/postgresql/10/main/postgresql.conf
 # database file
 /var/lib/postgresql/10/main
 # 日志文件
 /var/log/postgresql/postgresql-10-main.log

3)客戶端程序psql

連接postgresql數據庫的客戶端,使用之前需先切換到 postgres 用戶中。

 su postgres

 

使用形式:

執行psql就會默認連接到postgres數據庫。

3. psql基本指令

命令 說明
\l 顯示當前有哪些數據庫
\c <數據庫名> 連接到指定的數據庫
\d 查看數據庫中有哪些表
\dS <表名> 查看表的結構
\? 查看命令幫助提示
\q 退出psql終端

4. 數據庫操作

1)創建\刪除數據庫

 create database <...>
 drop database <...>

2)創建數據表

 CREATE TABLE tb_user (
 id int not null primary key,
 name varchar(30) not null,
 age int not null
 );

3)刪除數據表

 drop table <...>

4)增、刪、改、查基本操作

和mysql數據庫一致。

 insert into tb_user (id, name, age)
 values (1, 'smart', 21),
 (2, 'lily', 20),
 (3, 'linda', 18),
 (4, 'xiaoming', 25);

SQL語句操作數據庫。

5. Django使用postgresql數據庫

1)添加新的數據庫用戶

 create user <...> with password <...>;

2)創建數據庫並指定所屬用戶

 create database django_test owner <...>;

3)Django數據庫配置

注:python環境中需安裝psycopg2-binary:pip install psycopg2-binary

 DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'USER': '...',
 'PASSWORD': '...',
 'HOST': '...ip',
 'PORT': '...',
 'NAME': '...'
 }
 }

4)修改postgresql配置文件,指定允許遠程連接

 # vi /etc/postgresql/10/main/postgresql.conf
 listen_addresses = '*' # 運行遠程連接

5)重啟postgresql服務

 systemctl restart postgresql

6)允許任意用戶從任意機器上以密碼方式訪問數據庫

 # vi /etc/postgresql/10/main/pg_hba.conf
 host all all 0.0.0.0/0 md5

7)重啟postgresql服務

 

 

 

補充


 

psql -h <hostname or ip> -p <端口> [數據庫名稱] [用戶名稱]

這些連接參數也可以用環境變量指定,比如:

export PGDATABASE=testdb

export PGHOST=127.0.0.1

export PGPORT=5432

export PGUSER=postgres

然后直接允許 psql 即可。

 

psql 的常用命令

    psql 的命令都是以斜杠 "\" 開頭的。

    \l  查看所有數據庫

    \d [ pattern ] 該命令將顯示每個匹配關系(表、視圖、索引、序列)的信息,可以加上 + 查看更多的信息,如 \d+

     1、不加任何參數表示查看當前數據庫的所有表。

     2、\d tablename 后面跟一個表名,表示顯示這個表的結構定義

     3、\d indexname 也可以顯示索引的信息,如 \d 索引名稱

     4、\d * 后面也可以跟通配符如 "*" 或 "?",\d x*

     5、\d+ 將顯示比 \d 更詳細的信息,還會顯示任何與表關系的注釋,以及表中出現的 OID 

     6、\dt 只顯示匹配的表  

          \di 只顯示索引

          \ds  只顯示序列

          \dv 只顯示視圖

          \df 只顯示函數

     7、\timing on或off 顯示 SQL 已執行的時間,默認情況下是 off

          

     8、\dn 列出所有的 schema 

     9、 \du 或 \dg 列出所有的數據庫用戶和角色

     10、 \db 顯示所有的表空間,表空間其實是一個目錄,放在這個表空間的表,就是把表的數據文件發到這個表空間下。

     11、\dp 或 \z 顯示表的權限分配情況

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

     13、\pset 設置輸出的格式,\pset border 0 : 表示輸出內容無邊框。 border 1 :表示邊框只在內部。border 2 :內外都有邊框

     14、\x 把表中的每一行的每列數據都拆分為單行展示,與 MySQL 中的 "\G" 的功能類似。

     

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

    16、\password 設置密碼

    17、\conninfo 列出當前數據庫連接的信息

    18、\dx 查看數據庫中安裝的擴展 或 select * from pg_extension;

更多的命令可以用 \? 來顯示  

 

執行存儲在外部文件中的 SQL 命令

    \i <文件名> 執行存儲在外部文件中的 sql 語句

    當然也可以在 psql 命令行加 "-s <filename>" 來執行 SQL 腳本文件中的命令,如 psql -s test.sql

 

psql 的使用技巧

1、在啟動 psql 命令后中加 "-E" 參數,就可以把 psql 中各種以 "\" 開頭的命令執行的實際 SQL 打印出來,如下 psql -E postgres,如果想關閉此功能,可以使用 "\set ECHO_HIDDEN on | off"

 

 2、自動提交方面的技巧

      psql 中的事務是自動提交的,可以運行 begin; 然后執行 dml 語句,最后再執行 commit 或 rollback 語句。或 直接使用 psql 中的命令關閉自動提交的功能。 \set AUTOCOMMIT off

 

 3. 查看數據庫、表、索引大小

select pg_size_pretty(pg_table_size('test'));   
select pg_size_pretty(pg_database_size('david'));
select pg_size_pretty(pg_indexes_size('test'));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM