PG技術大講堂 - Part 10:PostgreSQL資料庫管理

北京cuug 發佈 2024-04-03T10:20:00.091318+00:00

ALTER DATABASE 名稱 OWNER TO { 新的屬主 | CURRENT_USER | SESSION_USER }。

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。

Part 10:PostgreSQL資料庫管理

內容1:PostgreSQL資料庫結構

內容2:PostgreSQL資料庫級權限管理

內容3:PG資料庫級環境參數設置

內容4:PostgreSQL資料庫級屬性修改


10.1、資料庫結構

資料庫集簇邏輯結構每個資料庫存儲的對象(表、索引、視圖等等)是獨立的、私有的,每個資料庫類似於每個房間,從房間中取東西,就需要到房間裡面;同理,要訪問某個資料庫中的對象,就需要登錄到指定的資料庫中。

PostgreSQL資料庫結構

資料庫集群是由PostgreSQL伺服器管理的資料庫的集合。PostgreSQL中的「資料庫集群」一詞並不意味著「一組資料庫伺服器」。PostgreSQL伺服器在單個主機上運行,並管理單個資料庫群集。

資料庫是資料庫對象的集合。在關係資料庫理論中,資料庫對象是用來存儲或引用數據的數據結構。堆(heap)表是一個典型的例子,它有很多類似於索引、序列、視圖、函數等等。在PostgreSQL中,資料庫本身也是資料庫對象,在邏輯上彼此分離。所有其他資料庫對象(如表、索引等)都屬於各自的資料庫。

PostgreSQL資料庫屬主

· Postgres中的資料庫屬主屬於創建者,只要有createdb的權限就可以創建資料庫,資料庫屬主不一定擁有存放在該資料庫中其它用戶創建的對象的訪問權限。

· 資料庫在創建後,允許public角色連接,即允許任何人連接。

· 資料庫在創建後,不允許除了超級用戶和owner之外的任何人在資料庫中創建schema。

· 資料庫在創建後,會自動創建名為public的schema,這個schema的all權限已經賦予給了public角色,即允許任何人在裡面創建對象,但對己存在的其它用戶的表不具有任何權限。


10.2、資料庫權限

CREATE:可以在指定資料庫創建schema的權限

CONNECT:可以連接到指定資料庫的權限TEMPORARY:可以創建臨時表的權限ALL:指定資料庫所有的權限語法:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }

ON DATABASE 資料庫名稱 [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

由於資料庫在創建後,允許public角色連接,即允許任何人連接。所以如果要取消某個用戶對指定資料庫連接的權限,需要先取消public的連接權限,再取消該用戶的連接權限。

--授權用戶連接資料庫的權限

grant connect on database db_name to user_name;

--撤銷用戶連接資料庫的權限

revoke connect on database db_name from public;

revoke connect on database db_name from user_name;

--查看哪些用戶有某個資料庫的connect權限

select datname,datacl from pg_database where datname='db_name';


10.3、資料庫環境設置

PostgreSQL參數設置分為實例級、資料庫級、用戶級和會話級,而有些參數可以在所有級別中設置,優先級順序為會話級>用戶級>資料庫級>實例級。

資料庫參數配置語法:

ALTER DATABASE 名稱 SET 配置參數 { TO | = } { 值 | DEFAULT }

ALTER DATABASE 名稱 SET 配置參數 FROM CURRENT

ALTER DATABASE 名稱 RESET 配置參數

ALTER DATABASE 名稱 RESET ALL

配置示例(一):

--設置資料庫搜索路徑:

ALTER database postgres set search_path to "$user", public, schema_name;

--配置連接某個庫時可使用的工作內存

alter database postgres set work_mem = '8MB';

--配置連接某個庫時可使用的維護內存

alter database postgres set maintenance_work_mem TO '256MB';

配置示例(二):

--配置連接某個庫後使用的時區

alter database postgres set TimeZone to cet;alter database postgres set DateStyle to SQL, DMY;(重新登錄生效)

--配置連接某個庫後執行語句最多時長(執行1秒超時)

alter database postgres set statement_timeout =1000;

--配置連接某個庫後默認的客戶端編碼,配置客戶端編碼為gbk,適用於資料庫編碼為utf8,應用程式編碼為gbk的應用

alter database postgres set client_encoding to gbk;

配置示例(三):

--配置某個庫使用日誌記錄級別(設置後,對這個資料庫的訪問不記錄日誌)

alter database postgres set log_statement=none;

--配置連接某個庫後的wal日誌寫盤級別(設置後,該庫的更新操作只要求本地提交)

alter database postgres set synchronous_commit to local;

--配置連接某個庫後禁用某個規劃器(禁用indexonlyscan掃描)

alter database postgres set enable_indexonlyscan to off;

配置示例(四):

--配置連接某個庫後執行出錯時中斷連接(對新會話生效)

alter database postgres set exit_on_error to on;

--重新連接後

select pg_backend_pid();

--執行錯誤會導致連接中斷

select * from d1;

配置示例(五):

--查看所有個性化配置

\drds

--查詢資料庫的連接數限制只能查看數據字典表

select datname,datconnlimit from pg_database

--設置某個個性化設置為默認值

ALTER DATABASE postgres reset exit_on_error;

--設置所有個性化設置為默認值

ALTER DATABASE postgres reset ALL;


10.4、資料庫屬性修改

資料庫的屬性我們可以進行修改,修改範圍是資料庫名字、屬主、表空間。

ALTER DATABASE 名稱 RENAME TO 新的名稱

ALTER DATABASE 名稱 OWNER TO { 新的屬主 | CURRENT_USER | SESSION_USER }

ALTER DATABASE 名稱 SET TABLESPACE 新的表空間

示例:

--修改資料庫名字

ALTER DATABASE newdb2 RENAME TO newdb3;

--修改資料庫屬主

ALTER DATABASE newdb3 OWNER TO u1;

--修改新表空間的名字

ALTER DATABASE newdb3 SET TABLESPACE new_tbl;

以上就是Part 10 - PostgreSQL資料庫管理 的內容,歡迎進群一起探討交流,釘釘交流群:35,82,24,60,釘釘群有專門講解公開課

往期課程,聯繫cuug諮詢老師

關鍵字: