PostgreSQL常用命令(持續更新)


PostgreSQL 10.18 on Windows

--

 

PostgreSQL\10\bin 下可執行exe文件(部分):

psql.exe

createdb.exe

dropdb.exe

initdb.exe

createuser.exe

dropuser.exe

 

本文主要展示 psql的使用,以及進入PostgreSQL控制台的命令使用。

 

超級用戶(角色):postgres

注,下文如未特別說明,都是使用此用戶進行操作。

 

基本使用

使用psql連接DB服務器

幫助信息:

>psql --help

訪問本機DB服務器:

>psql -U postgres
用戶 postgres 的口令:
psql (10.18)
輸入 "help" 來獲取幫助信息.

postgres=#

 

幫助信息:help

postgres=# help
您正在使用psql, 這是一種用於訪問PostgreSQL的命令行界面
鍵入: \copyright 顯示發行條款
       \h 顯示 SQL 命令的說明
       \? 顯示 pgsql 命令的說明
       \g 或者以分號(;)結尾以執行查詢
       \q 退出
postgres=#

postgres=# \copyright
PostgreSQL Database Management System
(formerly known as Postgres, then as Postgres95)

Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
......省略......

postgres=# \h
可用的說明:
  ABORT                            CREATE USER MAPPING
  ALTER AGGREGATE                  CREATE VIEW
  ALTER COLLATION                  DEALLOCATE
  ALTER CONVERSION                 DECLARE
......省略......

postgres=# \?
一般性
  \copyright            顯示PostgreSQL的使用和發行許可條款
  \crosstabview [COLUMNS] 執行查詢並且以交叉表顯示結果
  \errverbose            以最冗長的形式顯示最近的錯誤消息
  \g [文件] or;     執行查詢 (並把結果寫入文件或 |管道)
......省略......

 

\q 退出腳本。 

 

\h 顯示 SQL腳本\h + 命令,可以查看腳本語法:

postgres=# \h ABORT
命令:       ABORT
描述:       中止目前的事務
語法:
ABORT [ WORK | TRANSACTION ]


postgres=# \h SELECT
命令:       SELECT
描述:       從數據表或視圖中讀取數據
語法:
[ WITH [ RECURSIVE ] with查詢語句(with_query) [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( 表達式 [, ...] ) ] ]
    [ * | 表達式 [ [ AS ] 輸出名稱 ] [, ...] ]
    [ FROM from列表中項 [, ...] ]
    [ WHERE 條件 ]
    [ GROUP BY grouping_element [, ...] ]
    [ HAVING 條件 ]
......省略......

 

\? 分頁顯示 一些命令——非SQL腳本,下面將介紹更多這些命令。

 

說明,
出現“-- More  --”時,
Enter 看下一行,
空格 看下一頁,
q 結束查看。
其中有很多后面要介紹的命令。

 

執行 \? 中查到的一些命令,目前主要用了查看 數據庫的信息。

當前連接信息:

postgres=# \conninfo
以用戶 "postgres" 的身份, 在主機"localhost", 端口"5432"連接到數據庫 "postgres"

注,目前只有一個 postgres 數據庫,后面再新建數據庫后,再講 切換。

查看數據庫列表:\list \list+ \l \l+ (是 L 不是 一)

postgres=# \l
                                                        數據庫列表
   名稱    |  擁有者  | 字元編碼 |            校對規則            |             Ctype              |       存取權限
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------
 postgres  | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
 template0 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +
           |          |          |                                |                                | postgres=CTc/postgres
 template1 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +
           |          |          |                                |                                | postgres=CTc/postgres
(3 行記錄)


postgres=# \l+
                                                                                          數據庫列表
   名稱    |  擁有者  | 字元編碼 |            校對規則            |             Ctype              |       存取權限        |  大小   |   表空間   |                    描述                  
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------+---------+------------+--------------------------------------------
 postgres  | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |                       | 7575 kB | pg_default | default administrative connection database
 template0 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +| 7441 kB | pg_default | unmodifiable empty database
           |          |          |                                |                                | postgres=CTc/postgres |         |            |
 template1 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +| 7441 kB | pg_default | default template for new databases
           |          |          |                                |                                | postgres=CTc/postgres |         |            |
(3 行記錄)

 

列出表、視圖、序列:

選項說明:S = 顯示系統對象, + = 其余的詳細信息

postgres=# \d
Did not find any relations.

加了 S ,顯示出了表、視圖等信息
postgres=# \dS
                             關聯列表
  架構模式  |              名稱               |  類型  |  擁有者
------------+---------------------------------+--------+----------
 pg_catalog | pg_aggregate                    | 數據表 | postgres
 pg_catalog | pg_am                           | 數據表 | postgres
 pg_catalog | pg_amop                         | 數據表 | postgres
 pg_catalog | pg_amproc                       | 數據表 | postgres
 pg_catalog | pg_attrdef                      | 數據表 | postgres
 pg_catalog | pg_attribute                    | 數據表 | postgres
 pg_catalog | pg_auth_members                 | 數據表 | postgres
 pg_catalog | pg_authid                       | 數據表 | postgres
 pg_catalog | pg_available_extension_versions | 視圖   | postgres
 pg_catalog | pg_available_extensions         | 視圖   | postgres
 ......省略......
 
 再添加 加號(+),顯示了更多信息,包括表存儲空間
 postgres=# \dS+
                                       關聯列表
  架構模式  |              名稱               |  類型  |  擁有者  |    大小    | 描述
------------+---------------------------------+--------+----------+------------+------
 pg_catalog | pg_aggregate                    | 數據表 | postgres | 48 kB      |
 pg_catalog | pg_am                           | 數據表 | postgres | 40 kB      |
 pg_catalog | pg_amop                         | 數據表 | postgres | 80 kB      |
 pg_catalog | pg_amproc                       | 數據表 | postgres | 64 kB      |
 pg_catalog | pg_attrdef                      | 數據表 | postgres | 8192 bytes |
 pg_catalog | pg_attribute                    | 數據表 | postgres | 416 kB     |
 pg_catalog | pg_auth_members                 | 數據表 | postgres | 40 kB      |
 pg_catalog | pg_authid                       | 數據表 | postgres | 40 kB      |
 pg_catalog | pg_available_extension_versions | 視圖   | postgres | 0 bytes    |
 pg_catalog | pg_available_extensions         | 視圖   | postgres | 0 bytes    |
 ......省略......
 

 

\d[S+]  名稱   :   描述表,視圖,序列,或索引

postgres=# \dS pg_attribute
              數據表 "pg_catalog.pg_attribute"
     欄位      |   類型    | Collation | Nullable | Default
---------------+-----------+-----------+----------+---------
 attrelid      | oid       |           | not null |
 attname       | name      |           | not null |
 atttypid      | oid       |           | not null |
 attstattarget | integer   |           | not null |
 attlen        | smallint  |           | not null |
 attnum        | smallint  |           | not null |
 attndims      | integer   |           | not null |
 attcacheoff   | integer   |           | not null |
 atttypmod     | integer   |           | not null |
 attbyval      | boolean   |           | not null |
 attstorage    | "char"    |           | not null |
 attalign      | "char"    |           | not null |
 attnotnull    | boolean   |           | not null |
 atthasdef     | boolean   |           | not null |
 attidentity   | "char"    |           | not null |
 attisdropped  | boolean   |           | not null |
 attislocal    | boolean   |           | not null |
 attinhcount   | integer   |           | not null |
 attcollation  | oid       |           | not null |
 attacl        | aclitem[] |           |          |
 attoptions    | text[]    |           |          |
 attfdwoptions | text[]    |           |          |
索引:
    "pg_attribute_relid_attnam_index" UNIQUE, btree (attrelid, attname)
    "pg_attribute_relid_attnum_index" UNIQUE, btree (attrelid, attnum)


postgres=#
postgres=#
postgres=#
postgres=# \dS pg_available_extensions
         視圖 "pg_catalog.pg_available_extensions"
       欄位        | 類型 | Collation | Nullable | Default
-------------------+------+-----------+----------+---------
 name              | name |           |          |
 default_version   | text |           |          |
 installed_version | text |           |          |
 comment           | text |           |          |


postgres=#

 

添加  加號(+) 會顯示更多:

postgres=# \dS+ pg_attribute
                            數據表 "pg_catalog.pg_attribute"
     欄位      |   類型    | Collation | Nullable | Default |   存儲   | 統計目標 | 描述
---------------+-----------+-----------+----------+---------+----------+----------+------
 attrelid      | oid       |           | not null |         | plain    |          |
 attname       | name      |           | not null |         | plain    |          |
 atttypid      | oid       |           | not null |         | plain    |          |
 attstattarget | integer   |           | not null |         | plain    |          |
 attlen        | smallint  |           | not null |         | plain    |          |
 attnum        | smallint  |           | not null |         | plain    |          |
 attndims      | integer   |           | not null |         | plain    |          |
 attcacheoff   | integer   |           | not null |         | plain    |          |
 atttypmod     | integer   |           | not null |         | plain    |          |
 attbyval      | boolean   |           | not null |         | plain    |          |
 attstorage    | "char"    |           | not null |         | plain    |          |
 attalign      | "char"    |           | not null |         | plain    |          |
 attnotnull    | boolean   |           | not null |         | plain    |          |
 atthasdef     | boolean   |           | not null |         | plain    |          |
 attidentity   | "char"    |           | not null |         | plain    |          |
 attisdropped  | boolean   |           | not null |         | plain    |          |
 attislocal    | boolean   |           | not null |         | plain    |          |
 attinhcount   | integer   |           | not null |         | plain    |          |
 attcollation  | oid       |           | not null |         | plain    |          |
 attacl        | aclitem[] |           |          |         | extended |          |
 attoptions    | text[]    |           |          |         | extended |          |
 attfdwoptions | text[]    |           |          |         | extended |          |
索引:
    "pg_attribute_relid_attnam_index" UNIQUE, btree (attrelid, attname)
    "pg_attribute_relid_attnum_index" UNIQUE, btree (attrelid, attnum)


postgres=#

 

查看PostgreSQL數據庫連接及數量

postgres=# select * from pg_stat_activity;

這個表的信息很多,可以只 查詢其中部分字段:

postgres=# select datid,datname,pid,usename,state,client_addr,query from pg_stat_activity;
 datid | datname  |  pid  | usename  | state  | client_addr |                                      query
-------+----------+-------+----------+--------+-------------+---------------------------------------------------------------------------------
       |          | 18904 |          |        |             |
       |          | 18556 | postgres |        |             |
 12938 | postgres | 16576 | postgres | active | ::1         | select datid,datname,pid,usename,state,client_addr,query from pg_stat_activity;
 16394 | lib1     | 13592 | postgres | idle   | 127.0.0.1   | SELECT id,name,age,email FROM guser WHERE id=$1
 16394 | lib1     | 11140 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 14976 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     |  9508 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     |  6728 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 12988 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 15288 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 12872 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 13108 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
 16394 | lib1     | 19376 | postgres | idle   | 127.0.0.1   | SET application_name = 'PostgreSQL JDBC Driver'
       |          | 14144 |          |        |             |
       |          |  9304 |          |        |             |
       |          |   992 |          |        |             |
(16 行記錄)

注意,其中有10個idle的連接,這個來自本機的一個Spring Boot程序。默認的數據庫攔截池使用 HikariCP,十個連接。

 

更換為Druid數據庫后:配置了更少的初始數據庫連接(當然,HikariCP也可以配置),,這次只有8個了

lib2=# select datid,datname,pid,usename,state,client_addr,query from pg_stat_activity;
 datid | datname |  pid  | usename  | state  | client_addr |                                      query
-------+---------+-------+----------+--------+-------------+---------------------------------------------------------------------------------
       |         | 18904 |          |        |             |
       |         | 18556 | postgres |        |             |
 16402 | lib2    | 15936 | postgres | active | ::1         | select datid,datname,pid,usename,state,client_addr,query from pg_stat_activity;
 16394 | lib1    |  2940 | postgres | idle   | 127.0.0.1   | SELECT id,name,age,email FROM guser WHERE id=$1
 16402 | lib2    | 18808 | postgres | idle   | 127.0.0.1   | SELECT id,sn,name FROM device WHERE id=$1
       |         | 14144 |          |        |             |
       |         |  9304 |          |        |             |
       |         |   992 |          |        |             |
(8 行記錄)

 

數據備份與恢復

方式1:導出sql文件,導入也是sql文件

文本文件導入導出使用 psql

# 導出數據庫 lib1
D:\>pg_dump -U postgres -f lib1 lib1
口令:

# 將數據庫lib1導出才 文本文件 導入數據庫 lib3
D:\>psql -U postgres -d lib3 -f lib1
...內容會很多...

方式2:dump文件導出導入 -Fc

D:\>pg_dump -U postgres -Fc lib1 > lib1.dump
口令:

D:\>pg_restore -U postgres -d lib3 lib1.dump > a.txt
口令:

方式3:tar文件導出導入 -Ft

D:\>pg_dump -U postgres -Ft lib1 > lib1.tar
口令:

D:\>
D:\>pg_restore -U postgres -d lib3 lib1.tar > a.txt
口令:

 

注意,

1、方式1執行時,使用 版本10的 psql從 版本13 的 PostgreSQL服務器獲取數據時,失敗了;

后安裝了 PostgreSQL 14,就可以從 低版本13 中導出數據了。

2、方式2、3中,導入時的 信息都被 重定向到了 a.txt 文件。

 

用戶&角色管理

基本概念:

用戶、組、角色、權限

 

系統用戶表:pg_user 視圖

系統組表:pg_group 視圖

系統角色表:pg_roles 視圖

注意,都是 視圖,不是表。

 

用戶創建、刪除:

方式1、createuser.exe、dropdb.exe 命令

%POSTGRESSQL_HOME%/bin目錄下:

C:\Users\Mi>createuser --help
createuser 創建一個新的 PostgreSQL 用戶.

使用方法:
  createuser [選項]... [用戶名]
---省略---

C:\Users\Mi>dropuser --help
dropuser 刪除一個 PostgreSQL 用戶.

使用方法:
  dropuser [選項]... [用戶名]

選項:
  -e, --echo                顯示發送到服務端的命令
---省略---

方式2:sql腳本

使用psql連接PostgreSQL后:

postgres=# \h create user
命令:       CREATE USER
描述:       定義一個新數據庫角色
語法:
CREATE USER 名稱 [ [ WITH ] 選項 [ ... ] ]

選項可以是

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT 連接限制
    | [ ENCRYPTED ] PASSWORD '口令'
    | VALID UNTIL '時間戳'
    | IN ROLE 角色名稱 [, ...]
    | IN GROUP 角色名稱 [, ...]
    | ROLE 角色名稱 [, ...]
    | ADMIN 角色名稱 [, ...]
    | USER 角色名稱 [, ...]
    | SYSID uid

postgres=# \h drop user
命令:       DROP USER
描述:       移除一個數據庫成員
語法:
DROP USER [ IF EXISTS ] 名稱 [, ...]

 

查詢用戶:

# 用戶 postgres 登錄后

創建用戶:命令行居然顯示為 “CREATE ROLE”
# create user user1;
CREATE ROLE

查詢pg_roles視圖:多了一個 user1角色
postgres=# select * from pg_roles;
       rolname        | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid
----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
 pg_signal_backend    | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  4200
 user1                | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 16434
 postgres             | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           |    10
 pg_read_all_stats    | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3375
 pg_monitor           | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3373
 pg_read_all_settings | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3374
 pg_stat_scan_tables  | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3377
(7 行記錄)

查詢用戶
# select user;

查詢當前用戶
# select * from current_user;

在pg_user視圖 中查詢 所有用戶:多了一個 user1用戶
不過,沒有任何權限,所有的 值都是 f——false?
# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          |
 user1    |    16434 | f           | f        | f       | f            | ******** |          |
(2 行記錄)

 

除了用戶的概念,還有 組(GROUP) 的概念:


postgres=# \h create group
命令:       CREATE GROUP
描述:       定義一個新數據庫角色
語法:
CREATE GROUP 名稱 [ [ WITH ] 選項 [ ... ] ]

選項可以是

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT 連接限制
    | [ ENCRYPTED ] PASSWORD '口令'
    | VALID UNTIL '時間戳'
    | IN ROLE 角色名稱 [, ...]
    | IN GROUP 角色名稱 [, ...]
    | ROLE 角色名稱 [, ...]
    | ADMIN 角色名稱 [, ...]
    | USER 角色名稱 [, ...]
    | SYSID uid


postgres=#
postgres=# \h drop group
命令:       DROP GROUP
描述:       移除一個數據庫成員
語法:
DROP GROUP [ IF EXISTS ] 名稱 [, ...]

 

默認 組:

# select * from pg_group;
       groname        | grosysid | grolist
----------------------+----------+---------
 pg_monitor           |     3373 | {}
 pg_read_all_settings |     3374 | {3373}
 pg_read_all_stats    |     3375 | {3373}
 pg_stat_scan_tables  |     3377 | {3373}
 pg_signal_backend    |     4200 | {}
(5 行記錄)

 

還有 角色(ROLE) 的概念:

postgres=# \h create role
命令:       CREATE ROLE
描述:       定義一個新數據庫角色
語法:
CREATE ROLE 名稱 [ [ WITH ] 選項 [ ... ] ]

選項可以是

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT 連接限制
    | [ ENCRYPTED ] PASSWORD '口令'
    | VALID UNTIL '時間戳'
    | IN ROLE 角色名稱 [, ...]
    | IN GROUP 角色名稱 [, ...]
    | ROLE 角色名稱 [, ...]
    | ADMIN 角色名稱 [, ...]
    | USER 角色名稱 [, ...]
    | SYSID uid


postgres=#
postgres=# \h drop role
命令:       DROP ROLE
描述:       移除一個數據庫成員
語法:
DROP ROLE [ IF EXISTS ] 名稱 [, ...]

 

給上面的用戶 user1 賦予權限:

分配權限 GRANT

撤回權限 REVOKE

 

權限有哪些?\h grant 命令

postgres=# \h grant
命令:       GRANT
描述:       定義存取權限
語法:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
---省略---

 

來來來,繼續操作 用戶(角色)user1:

使用 alter user 對用戶進行更新:

# \h alter user
命令:       ALTER USER
描述:       更改數據庫角色
語法:
ALTER USER role_specification [ WITH ] 選項 [ ... ]
---省略---

 

添加密碼:123456

沒有密碼時
C:\Users\Mi>psql -U user1
用戶 user1 的口令:
psql: fe_sendauth: no password supplied

修改密碼及使用密碼登錄:此時沒有權限
postgres=# alter user user1 password '123456';
ALTER ROLE
postgres=# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          |
 user1    |    16434 | f           | f        | f       | f            | ******** |          |
(2 行記錄)


postgres=# \q

C:\Users\Mi>psql -U user1
用戶 user1 的口令:
psql: 致命錯誤:  數據庫 "user1" 不存在

 

給用戶 user1 添加數據庫lib1 的權限:

授權 數據庫 lib1 的所有權限
# grant all privileges on database lib1 to user1;
GRANT

登錄——不指定數據庫:失敗
>psql -U user1
用戶 user1 的口令:
psql: 致命錯誤:  數據庫 "user1" 不存在

登錄,指定擁有權限的數據庫 lib1:登錄成功
C:\Users\Mi>psql -U user1 -d lib1
用戶 user1 的口令:
psql (10.18)
輸入 "help" 來獲取幫助信息.

lib1=>

 

刪除用戶 user1:

自己刪除自己失敗:
lib1=> drop user user1;
錯誤:  刪除角色的權限不夠
lib1=>

超級用戶postgres登錄后,居然也不能刪除用戶 user1!
>psql -U postgres
用戶 postgres 的口令:
psql (10.18)
輸入 "help" 來獲取幫助信息.

postgres=# drop user user1;
錯誤:  無法刪除"user1"因為有其它對象倚賴它
描述:  數據庫 lib1的權限
postgres=#

 

刪除失敗,看來,刪除不像想象的那么簡單啊。

先撤銷權限,再刪除。

postgres=# revoke all privileges on database lib1 from user1;
REVOKE
postgres=#
postgres=# drop user user1;
DROP ROLE
postgres=#
postgres=# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          |
(1 行記錄)

 

除了權限、密碼,還可以限制 用戶的連接數:

CONNECTION LIMIT 連接限制

還可以 限制到期時間:

VALID UNTIL '時間戳'

還可以設置 GROUP、ROLE。

 

疑問:

psql中的 user、role 是同一個意思?

 

怎么查看視圖的創建語句?

菜鳥教程:
PostgreSQL 視圖是只讀的,因此可能無法在視圖上執行 DELETE、INSERT 或 UPDATE 語句。
但是可以在視圖上創建一個觸發器,當嘗試 DELETE、INSERT 或 UPDATE 視圖時觸發,需要做
的動作在觸發器內容中定義。

\? 命令:

  \sf[+]  FUNCNAME       顯示一個函數的定義
  \sv[+]  VIEWNAME       顯示一個視圖的定義
  \z      [模式]    和\dp的功能相同
前后省略了很多行

原來是 \sv[+] 命令:

postgres=# \sv pg_user
CREATE OR REPLACE VIEW pg_catalog.pg_user AS
 SELECT pg_shadow.usename,
    pg_shadow.usesysid,
    pg_shadow.usecreatedb,
    pg_shadow.usesuper,
    pg_shadow.userepl,
    pg_shadow.usebypassrls,
    '********'::text AS passwd,
    pg_shadow.valuntil,
    pg_shadow.useconfig
   FROM pg_shadow

postgres=#
postgres=# \sv pg_group
CREATE OR REPLACE VIEW pg_catalog.pg_group AS
 SELECT pg_authid.rolname AS groname,
    pg_authid.oid AS grosysid,
    ARRAY( SELECT pg_auth_members.member
           FROM pg_auth_members
          WHERE pg_auth_members.roleid = pg_authid.oid) AS grolist
   FROM pg_authid
  WHERE NOT pg_authid.rolcanlogin

postgres=# \sv pg_roles
CREATE OR REPLACE VIEW pg_catalog.pg_roles AS
 SELECT pg_authid.rolname,
    pg_authid.rolsuper,
    pg_authid.rolinherit,
    pg_authid.rolcreaterole,
    pg_authid.rolcreatedb,
    pg_authid.rolcanlogin,
    pg_authid.rolreplication,
    pg_authid.rolconnlimit,
    '********'::text AS rolpassword,
    pg_authid.rolvaliduntil,
    pg_authid.rolbypassrls,
    s.setconfig AS rolconfig,
    pg_authid.oid
   FROM pg_authid
     LEFT JOIN pg_db_role_setting s ON pg_authid.oid = s.setrole AND s.setdatabase = 0::oid

postgres=#

 

除了 表 的概念,模式(SCHMEA) 也是一個重要概念,還沒用過,咱不胡亂介紹了,待續

數據庫里面默認是有一個 名為 public 的 模式的。

 

》》》全文完《《《

 

211114 補充了權限部分,還不夠完善,還需努力

 

參考文檔

1、postgresql數據庫的數據導出

2、postgresql 查看數據庫連接數

3、菜鳥:PostgreSQL PRIVILEGES(權限)

4、

 


免責聲明!

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



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