postgresql 數(shù)據(jù)庫 面試題整理
前言
本文整理一些在面試中,pg數(shù)據(jù)庫可能會(huì)被問到的一下問題,希望對(duì)大家有用。
pg數(shù)據(jù)庫的特點(diǎn):
- 語言支持:PostgreSQL 支持四種標(biāo)準(zhǔn)的過程語言,包括 PL/pgSQL、PL/Tcl、PL/Perl 和 PL/Python。
- 索引:PostgreSQL 索引支持 B+ 樹、哈希、廣義搜索樹和廣義倒排索引。個(gè)人還可以設(shè)計(jì)自己的個(gè)性化索引。
- 視圖:PostgreSQL 支持生成虛擬表的視圖。
- 規(guī)則:PostgreSQL 支持規(guī)則,允許重寫查詢的層次結(jié)構(gòu)。
- 繼承:在 PostgreSQL 中,可以將表配置為通過繼承從“父”表繼承屬性。
- 用戶定義的函數(shù):它有助于構(gòu)建幾乎所有新的數(shù)據(jù)庫對(duì)象,包括轉(zhuǎn)換、轉(zhuǎn)換、數(shù)據(jù)類型、域、函數(shù)、聚合函數(shù)和索引,包括自定義種類運(yùn)算符的自定義索引。
pg的優(yōu)點(diǎn)
- 穩(wěn)定的
- 可靠的
- 可擴(kuò)展
- 簡單易學(xué)
- 開源
- 專為高容量環(huán)境而設(shè)計(jì)
- 跨平臺(tái)
- 更好的支持
- 靈活的
pg的核心優(yōu)勢
關(guān)系對(duì)象數(shù)據(jù)庫。
SQL 支持和可擴(kuò)展性
API 和數(shù)據(jù)庫驗(yàn)證的靈活性。
MVCC 和過程語言,
WAL 和客戶端-服務(wù)器。
pg數(shù)據(jù)庫的一些缺點(diǎn)
- 它在性能方面比 MySQL 慢。
- 與 MySQL 相比,它沒有大量開源應(yīng)用程序的支持。
- 由于它更注重兼容性,因此為提高速度而進(jìn)行的更改需要更多的工作。
PostgreSQL支持的各種數(shù)據(jù)類型
UUID
數(shù)值類型
布爾值
字符類型
時(shí)間類型
幾何圖元
任意精度數(shù)值
XML
數(shù)組等
pg的模式
模式是數(shù)據(jù)庫的元素,包括表。它們包括數(shù)據(jù)類型、函數(shù)和運(yùn)算符,以及其他命名對(duì)象類型。對(duì)象名稱跨模式兼容;與數(shù)據(jù)庫不同,模式劃分更自由。這表明用戶可以訪問他們鏈接到的數(shù)據(jù)庫中任何模式中的對(duì)象,直到他們被授予適當(dāng)?shù)臋?quán)限。當(dāng)多個(gè)用戶必須訪問單個(gè)數(shù)據(jù)庫而不相互干擾時(shí),模式非常有用。它有助于將數(shù)據(jù)庫項(xiàng)目組織成邏輯類別,以便更好地管理。為了防止基于名稱的沖突,第三方應(yīng)用程序可以放置在不同的模式中。
pg的多版本并發(fā)控制
PostgreSQL 使用 MVCC(也稱為多版本并發(fā)控制)來實(shí)現(xiàn)事務(wù)。它用于防止系統(tǒng)中意外的數(shù)據(jù)庫鎖定。每個(gè)查詢數(shù)據(jù)庫的事務(wù)都會(huì)看到不同版本的數(shù)據(jù)庫。這可以防止顯示不一致的數(shù)據(jù)并為每個(gè)數(shù)據(jù)庫會(huì)話提供事務(wù)隔離。用于讀取數(shù)據(jù)的 MVCC 鎖不會(huì)干擾為寫入數(shù)據(jù)而獲取的鎖。
pg多版本并發(fā)控制(MVCC)介紹
MVCC 或更廣為人知的多版本并發(fā)控制用于避免不必要的數(shù)據(jù)庫鎖定。消除了用戶的時(shí)間延遲,以便人們可以輕松地登錄到他的數(shù)據(jù)庫。所有的交易都保存完好作為記錄。當(dāng)其他人在內(nèi)容上時(shí)會(huì)發(fā)生時(shí)間延遲。 PostgreSQL 中的多版本并發(fā)控制或 MVCC 用于避免數(shù)據(jù)庫不必要的鎖定。這消除了用戶登錄其數(shù)據(jù)庫的時(shí)間延遲。當(dāng)其他人訪問內(nèi)容時(shí),會(huì)出現(xiàn)此功能或時(shí)間延遲。所有的交易都被保存為記錄。
pg如何提供安全性
PostgreSQL 采用兩層安全性。
- 網(wǎng)絡(luò)級(jí)安全——利用 Unix 域套接字、TCP/IP 套接字和防火墻實(shí)現(xiàn)網(wǎng)絡(luò)級(jí)安全。
- 傳輸級(jí)安全性- 傳輸級(jí)安全性采用 SSL/TLS 來確保安全的數(shù)據(jù)庫通信
- 數(shù)據(jù)庫級(jí)安全性——角色和權(quán)限、行級(jí)安全性 (RLS) 和審計(jì)都是數(shù)據(jù)庫級(jí)安全性的特征。
PostgreSQL 中使用什么選項(xiàng)來使事務(wù)看到在事務(wù)的先前部分中受影響的行
QL標(biāo)準(zhǔn)主要針對(duì)三種現(xiàn)象定義了四個(gè)級(jí)別的事務(wù)隔離。并發(fā)事務(wù)之間必須防止這三種現(xiàn)象。不希望出現(xiàn)的現(xiàn)象是:
- 幻讀:重新執(zhí)行查詢的事務(wù),返回一組滿足搜索條件的行,然后發(fā)現(xiàn)已經(jīng)滿足條件的行集由于另一個(gè)最近提交的事務(wù)而發(fā)生了變化。
- 不可重復(fù)讀?。阂粋€(gè)事務(wù)重新讀取它之前讀取的數(shù)據(jù),然后發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)被另一個(gè)事務(wù)(自初始讀取后提交)修改。
- 臟讀:讀取由并發(fā)未提交事務(wù)寫入的數(shù)據(jù)時(shí)的事務(wù)是臟讀。
pg跟其他數(shù)據(jù)庫的區(qū)別
pg跟Oracle、MySQL之間的區(qū)別
- Oracle 、MySQL和PG都可以是單實(shí)例多數(shù)據(jù)庫模式。
- PG和Oracle是多進(jìn)程模式,MySQL是單進(jìn)程多線程模式。在并發(fā)不高時(shí),MySQL處理速度快,但當(dāng)并發(fā)高的時(shí)候,對(duì)于現(xiàn)在多核的單臺(tái)機(jī)器上,MySQL的總體處理性能不如PostgreSQL,原因是MySQL的線程無法充分利用CPU的能力。
- PostgreSQL沒有回滾段,而Oracle與MySQL innodb都有回滾段。
- PostgreSQL完全免費(fèi),而且是BSD協(xié)議,Oracle是商業(yè)數(shù)據(jù)庫,不開源,MySQL數(shù)據(jù)庫雖然是開源的,但現(xiàn)在隨著SUN被oracle公司收購,現(xiàn)在基本上被oracle公司控制。
- PostgreSQL在復(fù)雜SQL的執(zhí)行、存儲(chǔ)過程、觸發(fā)器方面比MySQL支持的要好的多,是去O最佳的數(shù)據(jù)庫。
- Oracle和PG支持物理備庫,而MySQL只支持邏輯主從復(fù)制。
- Oracle支持堆表,也支持索引組織表;PostgreSQL只支持堆表,不支持索引組織表;Innodb只支持索引組織表。
- PG、SQL Server、Oracle的默認(rèn)的事務(wù)隔離級(jí)別為Read Committed(提交讀),MySQL的默認(rèn)的事務(wù)隔離級(jí)別為Repeatable Read(可重復(fù)讀)。
- PG、Oracle默認(rèn)的塊大小為8KB,而MySQL默認(rèn)數(shù)據(jù)頁大小為 16 KB
SQL 和 PostgreSQL 最顯著的區(qū)別是什么
PostgreSQL 是一個(gè)復(fù)雜的 SQL 變體。無法更新 PostgreSQL 視圖。PostgreSQL 不支持計(jì)算列。但是,它確實(shí)提供了功能索引。在 PostgreSQL 中,復(fù)制采用報(bào)告的形式。PostgreSQL 提供動(dòng)態(tài)的操作。
PostgreSQL 服務(wù)器提供多個(gè)級(jí)別的加密和靈活性,以提高數(shù)據(jù)安全性,防止在不安全的網(wǎng)絡(luò)場景中泄露。同時(shí),SQL server 旨在提供一個(gè)安全的數(shù)據(jù)庫平臺(tái)。為此,它包含多種功能,可以加密數(shù)據(jù)、減少授權(quán)和保護(hù)數(shù)據(jù)免受不道德行為的影響。
PostgreSQL 是 SQL(結(jié)構(gòu)化查詢語言)的擴(kuò)展或高級(jí)版本。您可以在這兩者之間看到以下差異:
- 我們不能像在 SQL 中那樣更新 PostgreSQL 數(shù)據(jù)庫中的視圖。
- 在 PostgreSQL 中,不需要像在 SQL 數(shù)據(jù)庫中那樣創(chuàng)建 DLL(動(dòng)態(tài)鏈接庫)來查看代碼的活動(dòng)。
- 此外,SQL 提供計(jì)算列,但 PostgreSQL 不提供。
- SQL 不支持動(dòng)態(tài)操作,但 PostgreSQL 支持它們。
PostgreSQL和NoSQL之間的區(qū)別
表達(dá)“NoSQL”包含了作為非關(guān)系數(shù)據(jù)庫一部分的廣泛的實(shí)現(xiàn)集合。這包括諸如 TokyoCabinet 之類的微型嵌入式數(shù)據(jù)庫、諸如 Hadoop 之類的大規(guī)模數(shù)據(jù)處理平臺(tái)以及介于兩者之間的一切。簡而言之,幾乎不可能評(píng)論 NoSQL 作為典型類所包含的范圍。
在非關(guān)系數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫之間進(jìn)行選擇也很普遍,因?yàn)閮烧咭呀?jīng)并存了四十多年。事實(shí)上,用戶應(yīng)該根據(jù)他們當(dāng)前的應(yīng)用需求來選擇數(shù)據(jù)庫的特性、社區(qū)支持和實(shí)現(xiàn)。此外,在大型項(xiàng)目中使用多種不同的數(shù)據(jù)庫正變得越來越普遍,而不是趨勢。此外,PostgreSQL 的用戶也不例外文章來源:http://www.zghlxwxcb.cn/news/detail-580477.html
PostgreSQL和MongoDB之間的區(qū)別
PostgreSQL 是一個(gè) SQL 數(shù)據(jù)庫,其中數(shù)據(jù)存儲(chǔ)在表的行和列中。它支持實(shí)體關(guān)系完整性和 JOINS 等概念。PostgreSQL 查詢語言是 SQL。PostgreSQL 支持垂直縮放。這就需要使用大型服務(wù)器來存儲(chǔ)數(shù)據(jù)。這導(dǎo)致需要停機(jī)時(shí)間來更新。如果您的應(yīng)用程序需要關(guān)系數(shù)據(jù)庫,或者您需要執(zhí)行超出 SQL 功能的復(fù)雜查詢,它的性能會(huì)更好。相比之下,MongoDB 是一個(gè) NoSQL 數(shù)據(jù)庫。不需要模式,因此可以存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)。數(shù)據(jù)保存在 BSON 文檔中,用戶可以修改其結(jié)構(gòu)。MongoDB 查詢是用 JavaScript 編寫的。由于其對(duì)水平擴(kuò)展的適應(yīng)性,可以根據(jù)需要添加額外的服務(wù)器,而停機(jī)時(shí)間很少甚至沒有。文章來源地址http://www.zghlxwxcb.cn/news/detail-580477.html
到了這里,關(guān)于postgresql 數(shù)據(jù)庫 面試題整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!