日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

psql切换schema_PostgreSQL教程(二):模式Schema详解

發(fā)布時(shí)間:2023/12/20 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 psql切换schema_PostgreSQL教程(二):模式Schema详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一個(gè)數(shù)據(jù)庫包含一個(gè)或多個(gè)命名的模式,模式又包含表。模式還包含其它命名的對象,包括數(shù)據(jù)類型、函數(shù),以及操作符。同一個(gè)對象名可以在不同的模式里使用而不會(huì)導(dǎo)致沖突; 比如,schema1和myschema都可以包含叫做mytable的表。和數(shù)據(jù)庫不同,模式不是嚴(yán)格分離的:一個(gè)用戶可以訪問他所連接的數(shù)據(jù)庫中的任意模式中的對象,只要他有權(quán)限。

我們需要模式有以下幾個(gè)主要原因:

1). 允許多個(gè)用戶使用一個(gè)數(shù)據(jù)庫而不會(huì)干擾其它用戶。

2). 把數(shù)據(jù)庫對象組織成邏輯組,讓它們更便于管理。

3). 第三方的應(yīng)用可以放在不同的模式中,這樣它們就不會(huì)和其它對象的名字沖突。

1. 創(chuàng)建模式:

CREATE SCHEMA myschema;

通過以上命令可以創(chuàng)建名字為myschema的模式,在該模式被創(chuàng)建后,其便可擁有自己的一組邏輯對象,如表、視圖和函數(shù)等。

2. public模式:

在介紹后面的內(nèi)容之前,這里我們需要先解釋一下public模式。每當(dāng)我們創(chuàng)建一個(gè)新的數(shù)據(jù)庫時(shí),PostgreSQL都會(huì)為我們自動(dòng)創(chuàng)建該模式。當(dāng)?shù)卿浀皆摂?shù)據(jù)庫時(shí),如果沒有特殊的指定,我們將以該模式(public)的形式操作各種數(shù)據(jù)對象,如:

CREATE TABLE products ( ... ) 等同于 CREATE TABLE public.products ( ... )

3. 權(quán)限:

缺省時(shí),用戶看不到模式中不屬于他們所有的對象。為了讓他們看得見,模式的所有者需要在模式上賦予USAGE權(quán)限。為了讓用戶使用模式中的對象,我們可能需要賦予額外的權(quán)限,只要是適合該對象的。PostgreSQL根據(jù)不同的對象提供了不同的權(quán)限類型,如:

GRANT ALL ON SCHEMA myschema TO public;

上面的ALL關(guān)鍵字將包含CREATE和USAGE兩種權(quán)限。如果public模式擁有了myschema模式的CREATE權(quán)限,那么登錄到該模式的用戶將可以在myschema模式中創(chuàng)建任意對象,如:

CREATE TABLE myschema.products (

product_no integer,

name text,

price numeric CHECK (price > 0),

);

在為模式下的所有表賦予權(quán)限時(shí),需要將權(quán)限拆分為各種不同的表操作,如:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema

GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;

在為模式下的所有Sequence序列對象賦予權(quán)限時(shí),需要將權(quán)限拆分為各種不同的Sequence操作,如:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema

GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;

在為模式下的所有函數(shù)賦予權(quán)限時(shí),僅考慮執(zhí)行權(quán)限,如:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema

GRANT EXECUTE ON FUNCTIONS TO public;

可以看出,通過以上方式在public模式下為myschema模式創(chuàng)建各種對象是極為不方便的。下面我們將要介紹另外一種方式,即通過role對象,直接登錄并關(guān)聯(lián)到myschema對象,之后便可以在myschema模式下直接創(chuàng)建各種所需的對象了。

CREATE ROLE myschema LOGIN PASSWORD '123456'; --創(chuàng)建了和該模式關(guān)聯(lián)的角色對象。

CREATE SCHEMA myschema AUTHORIZATION myschema; --將該模式關(guān)聯(lián)到指定的角色,模式名和角色名可以不相等。

在Linux Shell下,以myschema的角色登錄到數(shù)據(jù)庫MyTest,在密碼輸入正確后將成功登錄到該數(shù)據(jù)庫。

/> psql -d MyTest -U myschema

Password:

MyTest=> CREATE TABLE test(i integer);

CREATE TABLE

MyTest=> \d?? --查看該模式下,以及該模式有權(quán)限看到的tables信息列表。

List of relations

Schema???? |?? Name?? | Type? |? Owner

------------+---------+------+----------

myschema |?? test???? | table? | myschema

(1 rows)

4. 刪除模式:

DROP SCHEMA myschema;

如果要?jiǎng)h除模式及其所有對象,請使用級聯(lián)刪除:

DROP SCHEMA myschema CASCADE;

5. 模式搜索路徑:

我們在使用一個(gè)數(shù)據(jù)庫對象時(shí)可以使用它的全稱來定位對象,然而這樣做往往也是非常繁瑣的,每次都不得不鍵入owner_name.object_name。PostgreSQL中提供了模式搜索路徑,這有些類似于Linux中的$PATH環(huán)境變量,當(dāng)我們執(zhí)行一個(gè)Shell命令時(shí),只有該命令位于$PATH的目錄列表中,我們才可以通過命令名直接執(zhí)行,否則就需要輸入它的全路徑名。PostgreSQL同樣也通過查找一個(gè)搜索路徑來判斷一個(gè)表究竟是哪個(gè)表,這個(gè)路徑是一個(gè)需要查找的模式列表。在搜索路徑里找到的第一個(gè)表將被當(dāng)作選定的表。如果在搜索路徑中 沒有匹配表,那么就報(bào)告一個(gè)錯(cuò)誤,即使匹配表的名字在數(shù)據(jù)庫其它的模式中存在也如此。

在搜索路徑中的第一個(gè)模式叫做當(dāng)前模式。除了是搜索的第一個(gè)模式之外,它還是在CREATE TABLE沒有聲明模式名的時(shí)候,新建表所屬于的模式。要顯示當(dāng)前搜索路徑,使用下面的命令:

MyTest=> SHOW search_path;

search_path

----------------

"$user",public

(1 row)

可以將新模式加入到搜索路徑中,如:

SET search_path TO myschema,public;

為搜索路徑設(shè)置指定的模式,如:

SET search_path TO myschema; --當(dāng)前搜索路徑中將只是包含myschema一種模式。

總結(jié)

以上是生活随笔為你收集整理的psql切换schema_PostgreSQL教程(二):模式Schema详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。