基本概念
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS
)是用于管理數(shù)據(jù)庫(kù)的軟件系統(tǒng)。常見(jiàn)的關(guān)系型DBMS有PostgreSQL、
MySQL、Oracle、Microsoft SQL Server、SQLite 等。常見(jiàn)的 NoSQL 數(shù)據(jù)庫(kù)有 Redis、MongoDB、
Cassandra、Neo4j 等。PostgreSQL 榮獲了數(shù)據(jù)庫(kù)排名網(wǎng)站DB-Engines 2017、2018 以及 2020 年度數(shù)據(jù)庫(kù)管理系統(tǒng)稱(chēng)號(hào)
PostgreSQL 數(shù)據(jù)庫(kù)系統(tǒng)由實(shí)例(Instance
)和物理數(shù)據(jù)庫(kù)集群(Database Cluster
)組成。通
常所說(shuō)的數(shù)據(jù)庫(kù)管理系統(tǒng)也就是指數(shù)據(jù)庫(kù)系統(tǒng)。
實(shí)例(Instance
)由 PostgreSQL 后臺(tái)進(jìn)程和相關(guān)的內(nèi)存組成。啟動(dòng)服務(wù)器進(jìn)程時(shí)創(chuàng)建一個(gè)實(shí)
例,關(guān)閉服務(wù)器進(jìn)程時(shí)實(shí)例隨之關(guān)閉。啟動(dòng) PostgreSQL 服務(wù)器進(jìn)程之后,可以通過(guò)操作系統(tǒng)的
ps 命令查詢(xún)相關(guān)的后臺(tái)進(jìn)程:
數(shù)據(jù)庫(kù)集群,每個(gè) PostgreSQL 實(shí)例管理的都是一個(gè)數(shù)據(jù)庫(kù)集群,它可以包含多個(gè)數(shù)據(jù)庫(kù)。
需要注意,這里的集群不是多臺(tái)服務(wù)器組成的集群
數(shù)據(jù)庫(kù)(Database
),一個(gè)數(shù)據(jù)庫(kù)由一組相關(guān)的對(duì)象組成,例如表、索引、視圖、存儲(chǔ)
過(guò)程
模式(Schema
),數(shù)據(jù)庫(kù)中的對(duì)象使用模式進(jìn)行組織。準(zhǔn)確地說(shuō),一個(gè)數(shù)據(jù)庫(kù)由多個(gè)模式
組成,模式由許多對(duì)象組成
表空間(Tablespace
),在 PostgreSQL 中,數(shù)據(jù)庫(kù)對(duì)象(例如表)在文件系統(tǒng)中對(duì)應(yīng)的是文
件,表空間指定了這些文件存儲(chǔ)的目錄。創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象時(shí),只需要指定存儲(chǔ)對(duì)象的表空間的名
稱(chēng)(或者使用默認(rèn)值),而不需要指定磁盤(pán)上的物理路徑
創(chuàng)建數(shù)據(jù)庫(kù)
使用 SQL 語(yǔ)句查看已有的數(shù)據(jù)庫(kù)
select datname from pg_database;
--使用 SQL 語(yǔ) CREATE DATABASE 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):
CREATE DATABASE name;
創(chuàng)建數(shù)據(jù)庫(kù)時(shí)還可以指定許多選項(xiàng),例如字符集編碼、擁有者、默認(rèn)表空間、最大連接數(shù)等
等。具體參考官方文檔中完整的create database
修改數(shù)據(jù)庫(kù)
ALTER DATABASE name action;
action 指定了要執(zhí)行的修改操作,例如修改數(shù)據(jù)庫(kù)的名稱(chēng)、所有者、默認(rèn)表空間、數(shù)
據(jù)庫(kù)會(huì)話變量的默認(rèn)值等
-- 修改 testdb 的名稱(chēng)為newdb
alter database testdb rename to newdb;
ALTER DATABASE 語(yǔ)句還可以用于修改運(yùn)行時(shí)配置變量的會(huì)話默認(rèn)值
當(dāng)用戶(hù)連接數(shù)據(jù)庫(kù)時(shí),PostgreSQL 使用配置文件 postgresql.conf 或者啟動(dòng)命令 postgres 中設(shè)
置的變量值作為默認(rèn)值。使用 ALTER DATABASE 語(yǔ)句可以設(shè)置指定數(shù)據(jù)庫(kù)的這些配置:
ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }
PostgreSQL 將會(huì)使用該命令設(shè)置的值覆蓋 postgresql.conf 文件或者命
令行參數(shù)的值。注意,只有超級(jí)用戶(hù)或者數(shù)據(jù)庫(kù)的擁有者才能修改數(shù)據(jù)庫(kù)的默認(rèn)會(huì)話變量
-- 以下語(yǔ)句將會(huì)默認(rèn)禁用數(shù)據(jù)庫(kù) newdb 中的索引掃描
alter database newdb set enable_indexscan to off;
-- 數(shù)據(jù)庫(kù)newdb開(kāi)啟索引掃描
ALTER DATABASE newdb RESET enable_indexscan;
alter database 詳細(xì)配置
刪除數(shù)據(jù)庫(kù)
-- 使用 DROP DATABASE 語(yǔ)句刪除一個(gè)數(shù)據(jù)庫(kù) name表示數(shù)據(jù)庫(kù)名稱(chēng)
DROP DATABASE [ IF EXISTS] name;
如果使用了 IF EXISTS,刪除一個(gè)不存在的數(shù)據(jù)庫(kù)時(shí)不會(huì)產(chǎn)生錯(cuò)誤信息
刪除數(shù)據(jù)庫(kù)會(huì)同時(shí)刪除該數(shù)據(jù)庫(kù)中所有的對(duì)象,以及文件系統(tǒng)中的數(shù)據(jù)目錄。只有數(shù)據(jù)庫(kù)的
擁有者才能夠刪除數(shù)據(jù)庫(kù)。另外,如果數(shù)據(jù)庫(kù)上存在用戶(hù)連接,無(wú)法執(zhí)行刪除操作,可以連接到
其他數(shù)據(jù)庫(kù)執(zhí)行刪除命令
DROP DATABASE 命令的刪除操作無(wú)法恢復(fù),使用時(shí)千萬(wàn)小心!
管理模式
創(chuàng)建了數(shù)據(jù)庫(kù)之后,還需要?jiǎng)?chuàng)建模式(Schema)才能夠存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象。通常在創(chuàng)建一個(gè)
新的數(shù)據(jù)庫(kù)時(shí),默認(rèn)會(huì)創(chuàng)建一個(gè)模式 public
-- 查看當(dāng)前數(shù)據(jù)庫(kù)中的模式
select * from pg_namespace ;
PostgreSQL 也提供了管理模式的語(yǔ)句:
-
CREATE SCHEMA
,創(chuàng)建一個(gè)新的模式 -
ALTER SCHEMA
,修改模式的屬性 -
DROP SCHEMA
,刪除一個(gè)模式
-- 創(chuàng)建模式時(shí)還可以指定它的擁有者:
CREATE SCHEMA app AUTHORIZATION tony;
以 pg_開(kāi)頭的名稱(chēng)是系統(tǒng)保留的模式名稱(chēng),用戶(hù)無(wú)法創(chuàng)建這樣的模式。
創(chuàng)建了模式之后,我們就可以在模式中創(chuàng)建各種數(shù)據(jù)庫(kù)對(duì)象,例如表、數(shù)據(jù)類(lèi)型、函數(shù)以及
運(yùn)算符(模式相當(dāng)于表空間)
-- 如果需要修改已有模式的屬性 ,可以使用 ALTER SCHEMA 語(yǔ)句:
ALTER SCHEMA name RENAME TO new_name
ALTER SCHEMA name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
-- 如果模式中沒(méi)有任何對(duì)象,使用以下語(yǔ)句即可刪除該模式:
DROP SCHEMA name;
如果模式中存在其他對(duì)象,需要先刪除該模式中所有的對(duì)象,或者使用
以下語(yǔ)句級(jí)聯(lián)刪除這些對(duì)象文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-718015.html
DROP SCHEMA name CASCADE;
級(jí)聯(lián)刪除可能會(huì)刪除一些我們意料之外的對(duì)象,使用時(shí)需要小心。
數(shù)據(jù)庫(kù)中的大多數(shù)對(duì)象都位于某個(gè)模式之中,這樣設(shè)計(jì)的好處在于:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718015.html
- 允許多個(gè)用戶(hù)使用同一個(gè)數(shù)據(jù)庫(kù)而不會(huì)互相干擾,他們可以使用不同的模式來(lái)維護(hù)自己
的數(shù)據(jù) - 將數(shù)據(jù)庫(kù)對(duì)象進(jìn)行邏輯上的分組,便于管理
- 第三方應(yīng)用可以使用單獨(dú)的模式,不會(huì)與系統(tǒng)中的其他對(duì)象產(chǎn)生命名沖突
在我們常用的數(shù)據(jù)庫(kù)對(duì)象中,最主要的就是數(shù)據(jù)表(table)。
到了這里,關(guān)于postgresql-數(shù)據(jù)庫(kù)與模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!