PostgreSQL 與 SQL Server:16 個關鍵差異
已發表: 2022-05-30市場上有各種各樣的數據庫可供選擇,用戶通常可以仔細考慮 PostgreSQL 與 SQL Server,以便為他們的用例找出更好的選擇。 使用 PostgreSQL 進行運營的組織可能希望切換到像 Microsoft SQL Server 這樣的數據庫,因為它主要迎合不同的數據倉庫解決方案、電子商務和其他業務線。
從歷史上看,Microsoft SQL Server 一直是依賴於其他 Microsoft 產品的組織的最愛,但 PostgreSQL 取得了迅速的進展,成為了利基市場的佼佼者,這不僅是因為開源的好處,而且還因為它的活躍社區用戶和方便的功能。
這就是將我們帶到這次討論的原因。 比較 PostgreSQL 和 SQL Server 將幫助您更好地了解這兩個系統的可能優勢和權衡,以及哪一個更適合您的目的。
讓我們深入挖掘!
什麼是 PostgreSQL?

PostgreSQL 已將自己確立為支持 JSON(非關係)和 SQL(關係)查詢的企業級高級開源數據庫。 這個強大而穩定的數據庫管理系統得到了三十多年活躍社區發展的支持,這為其在完整性、可靠性、彈性、性能和正確性方面的聲譽做出了貢獻。
PostgreSQL 用作各種移動、Web、分析和地理空間應用程序的主要數據倉庫或數據存儲。 PostgreSQL 還擁有支持高級數據類型的豐富歷史,以及在其商業數據庫對應物(如 Microsoft SQL Server 和 Oracle)中常見的性能優化。
除了免費和開源之外,PostgreSQL 還具有高度可擴展性。 例如,您可以生成自定義函數、定義數據類型,甚至使用各種編程語言編寫代碼,而無需重新編譯數據庫!
歷史
以下是多年來對 PostgreSQL 的簡要概述:
- Ingres 於 1977 年首次開發。
- Michael Stonebraker 和他的同事在 1986 年開發了 Postgres。
- 1990 年,對 PL/pgSQL 和 ACID 合規性的支持被添加到 PostgreSQL。
- NYCPUG(紐約市 PostgreSQL 用戶組)早在 2013 年就加入了 PgUS(美國 PostgreSQL 協會)。
- 2014 年,PGconf 迎來了 PostgreSQL 用戶的新紀元。
主要特點
現在,讓我們繼續看看 PostgreSQL 的一些特性,這些特性使它成為市場上不可或缺的工具:
- 標準合規性和可靠性: PostgreSQL 的預寫日誌記錄使其成為一個高度容錯的數據庫。 PostgreSQL 還兼容 ACID,並以各種語言提供對視圖、外鍵、觸發器、連接和存儲過程的全面支持。 它包括大多數 SQL: 2008 數據類型,包括 BOOLEAN、NUMERIC、INTEGER、DATE、VARCHAR、TIMESTAMP、INTERVAL 和 CHAR。
- 強大的擴展: PostgreSQL 擁有強大的功能集,例如時間點恢復、多版本並發 (MVCC)、表空間、粒度訪問控制和在線/熱備份。 PostgreSQL 還可以區分大小寫、排序和格式化。 它在可以管理的數據量和可以容納的同時用戶數量方面都具有高度可擴展性。
- 開源許可:您可以在開源許可下使用 PostgreSQL 源代碼,讓您可以自由修改、使用和實施它,無需任何費用。 最重要的是,PostgreSQL 不會產生許可成本,從而消除了過度部署的風險。 PostgreSQL 的愛好者和貢獻者社區定期發現修復和錯誤,有助於數據庫系統的整體安全性。
用例
PostgreSQL 的多功能性使其可以在廣泛的用例中得到利用,例如:
- 聯合中心數據庫: PostgreSQL 的 JSON 支持和外部數據包裝器允許它與其他數據存儲(包括 NoSQL 數據類型)鏈接,並充當多語言數據庫系統的聯合中心。
- 通用 OLTP 數據庫:大型企業和初創公司都使用 PostgreSQL 作為主要數據存儲來支持其互聯網規模的應用程序、產品和解決方案。
- 地理空間數據庫: PostgreSQL 在與 PostGIS 擴展一起使用時支持地理對象。 它還可以用作地理信息系統 (GIS) 和基於位置的服務的地理空間數據存儲。
- LAPP 開源堆棧:作為 LAMP 堆棧的強大替代方案的一部分,PostgreSQL 還可以運行動態應用程序和網站。 LAPP 代表 Linux、Apache、PostgreSQL、Perl、PHP 和 Python。
什麼是 SQL Server?

SQL Server 是微軟開發的關係型數據庫管理系統,有著悠久的歷史,準確的說是三十二年。 Microsoft SQL Server 被認為是一種軟件產品,其主要功能是根據其他軟件應用程序的要求檢索和整理數據。
這些應用程序可能在網絡上的不同計算機上運行,也可能在同一台計算機上運行。 多年來,Microsoft SQL Server 經歷了許多更新,成為當今市場上受支持最好和最知名的 RDBMS 之一。
SQL Server 的流行很大程度上歸功於其製造商微軟。 當 MS SQL Server 處於起步階段時,微軟已經確立了自己作為科技巨頭的地位。
SQL Server 憑藉其廣泛的應用程序和簡化數據處理的工具,成功地成為了數據庫管理系統。 其全面的圖形用戶界面 (GUI) 允許直觀和輕鬆地使用數據庫,同時允許您為報告生成統計數據。
歷史
以下是多年來對 Microsoft SQL Server 的簡要概述:
- SQL Server 的發展始於 1988 年,當時 Microsoft 與 Sybase 和 Ashton-Tate 合作開發數據庫維護和創建軟件,這將為 Microsoft 的商業數據庫市場提供動力。
- SQL Server 1.0 於 1989 年推出。當時,它利用系統管理員工具 (SAF) 來生成數據庫。 它沒有任何文檔,但它仍然允許用戶運行 SQL 查詢和設置參數。 Microsoft SQL Server 的第一個代碼片段由 Sybase 編寫。
- 逐漸地,發布了具有更多改進和功能的更新版本。 SQL Server 2019 或 Aries 是綜合版本萬神殿的最新成員,因為它專注於使數據庫功能更加直觀易用。 這包括大數據集群選項,讓用戶可以選擇使用龐大的數據集。
主要特點
足夠的歷史談話。 讓我們來看看使 SQL Server 如此受歡迎的幾個關鍵特性:
- 強大的安全平台: SQL Server 允許您通過內置的數據保護、數據分類、警報和監控功能保護動態和靜態數據。 使用 SQL Server,您可以輕鬆加密敏感數據並對加密數據執行豐富的計算,並允許自定義的基於角色的數據訪問完成複雜的行過濾。
- 行業領先的性能: SQL Server 在 Linux 和 Windows 上擁有創紀錄的性能,因為它在 TPC-H 數據倉庫工作負載、TPC-E OLTP 工作負載和實際應用程序性能基準測試中始終處於領先地位。 您還可以使用 SQL Server 的內存數據庫功能(例如內存優化 tempdb 和持久內存支持)來提高任務關鍵型工作負載的性能。
- 使用大數據集群跨所有數據提供智能: SQL Server 允許您通過查詢整個數據資產(Azure SQL 數據庫、SQL Server、Teradata、MongoDB、Azure Cosmos DB 等)中的數據,從所有數據中獲得有價值的見解——無需複製或移動數據。 您甚至可以通過在 SQL Server 中組合非結構化和結構化數據並通過 Spark 或 T-SQL 訪問數據來構建共享數據湖。
用例
SQL Server 的可擴展性和性能使其可用於廣泛的用例,例如:
- 複製服務: SQL Server 使用 SQL Server 複製服務來協調和復制數據庫對象,無論是作為現有對象的子集還是作為其整體。 複製服務遵循訂閱者/發布者模型,即修改由一個數據庫服務器(發布者)發送,並由其他數據庫服務器(訂閱者)收集。
- 通知服務:通知服務最初是作為 SQL Server 2000 的發布後附加組件發布的。它是一種創建數據驅動修改的機制,然後將其發送給通知服務訂閱者。
- 機器學習服務: SQL Server 機器學習服務在 SQL Server 實例中運行,讓人們無需通過網絡移動數據或受到計算機內存的阻礙即可執行數據分析和機器學習。
- 分析服務: SQL Server 分析服務 (SSAS) 為 SQL Server 數據庫添加了數據挖掘和 OLAP 功能。 OLAP 引擎支持數據的關係在線分析處理 (ROLAP)、多維在線分析處理 (MOLAP) 和混合在線分析處理 (HOLAP) 存儲模式。 SQL Server 分析服務還支持將分析標準 XML 作為基本通信協議。
PostgreSQL 與 SQL Server:頭對頭比較
現在我們已經了解了 SQL Server 和 PostgreSQL 的突出方面,讓我們深入研究兩者之間的差異。 您可以使用下面提到的因素來確定最適合您需求的數據庫管理系統。
可用性
PostgreSQL 提供了各種各樣的解決方案來確保用戶的高可用性,包括預寫日誌傳送、共享磁盤故障轉移、數據分區和各種複制方法。 EDB Postgres Failover Manager 等工具提供自動故障轉移,通過監控和識別數據庫故障來確保高可用性。
另一方面,SQL Server 包括各種高可用性工具,例如日誌傳送、故障轉移群集和復制。 SQL Server 全天候工作的可用性組在滿足特定條件時提供自動故障轉移。 但是,此產品只能在 SQL Server 的企業版中訪問。
數據和表結構
為簡單起見,PostgreSQL 向其用戶提供 PL/pgSQL 過程編程語言。 PostgreSQL 中標準 SQL 的其他功能包括用戶定義類型、自定義模塊、擴展、JSON 支持以及觸發器和其他功能的額外選項。
SQL Server 使用與標準 SQL 相似的 T-SQL。 T-SQL 包括對數據和字符串處理、過程編程和局部變量的額外支持。
如果您想更好地了解系統如何緩存和處理請求,PostgreSQL 通過將它們視為單獨的操作系統進程來隔離進程。 每個數據庫都有一個單獨的內存並運行它的進程。 這使得監控和管理變得非常容易,但同時也使得擴展多個數據庫變得更加困難。
SQL Server 使用可以根據處理需要進行限製或增加的緩衝池。 與 PostgreSQL 不同,所有工作都在單個池中進行,沒有多個頁面。
PostgreSQL 和 SQL Server 都提供對臨時表的支持,因為它允許您存儲來自分支複雜邏輯和復雜過程的中間結果。 臨時表還可以通過將中間信息與基本信息隔離開來幫助改進數據庫的組織和性能。
碎片整理
當開發人員修改 SQL 數據庫的不同部分時,修改發生在系統的不同點,並且很難跟踪、讀取和管理。 因此,維護還應該涉及碎片整理——通過分配索引、生成新頁面和重新訪問結構來整理更新的數據庫的過程。 然後,數據庫可以釋放未正確使用的磁盤空間,以便數據庫可以更快的速度運行。
PostgreSQL 掃描數據層的表以查找空行並刪除不必要的元素。 通過這樣做,系統可以釋放磁盤空間。 但是,這種方法需要大量 CPU,並且會影響應用程序的性能。
另一方面,SQL Server 提供了一個高效的垃圾收集器,不會產生超過 15-20% 的開銷。 從技術上講,開發人員還可以連續運行垃圾收集器,因為它非常有效。 總而言之,SQL Server 提供了比 PostgreSQL 更多的碎片整理方法。
索引
數據庫處理索引的方式證明了它的可用性,因為索引用於查明數據而無需查找特定行。 您還可以使用索引來引用多個列或行。 您可以為文件分配相同的索引,將它們顯示在數據庫中的不同位置,並通過一次搜索收集所有這些片段。
PostgreSQL 支持基於索引的表組織,但早期版本沒有使用自動索引更新。 它還允許您在一次搜索中查找多個索引,這意味著您可以發現很多信息。
SQL Server 為索引管理提供了豐富的自動化功能。 它們可以在集群中組織並維持正確的行順序,而無需人工參與。 SQL Server 還支持部分索引和多索引搜索。
特徵
與其他 SQL 數據庫不同,PostgreSQL 不提供內置的作業調度程序。 重複性任務需要外部工具,如 Linux 上的 cron、pgAgent 或 pg_cron,以及 Windows 上的 SQLBackupAndFTP 或 Task Scheduler。
另一方面,SQL Server 中的任務可以通過 SQL Server Management Studio 輕鬆安排。
PostgreSQL 擁有完善的多版本並發控制 (MVCC) 來同時處理多個過程。 MVCC 提供數據庫信息的快照,以避免顯示由同時事務或其他數據庫系統中發生的數據鎖定引起的不一致。 PostgreSQL 利用可序列化快照隔離 (SSI) 來確保事務隔離。
SQL Server 具有欠發達的多版本並發控制系統,並且默認情況下依賴於數據鎖定以避免同時事務中的錯誤。 SQL Server 還提供了樂觀並發功能,它假定此類問題很少發生。 因此,與鎖定一行相反,它根據緩存版本進行驗證,以查找是否發生了任何更改。
分區和分片
當性能提升對於大型數據庫至關重要並且您已經最大化存儲過程並且您的硬件也升級時,您需要將工作分佈在不同的服務器上。 這是分區和分片發揮作用的時候。
雖然分片和分區本質上都是關於將大型數據集分解為較小的子集,但分片意味著數據分佈在多台計算機上,而分區則不會。
從 10.0 版開始,PostgreSQL 支持聲明式分區——按範圍、列表或哈希進行分區。
MS SQL Server 支持水平分區——將一個包含很多行的表拆分為幾個包含較少行的表。
MS SQL Server 還支持通過聯合進行分片。 “聯合分區視圖”是表分佈在不同服務器上以平衡處理負載的視圖。
要從服務器檢索記錄,您需要某些命令。 這些命令稱為分佈式分區視圖。 他們使用典型的 SQL 語句以及關鍵字 UNION 從所有分佈式服務器中提取數據。
同樣,當在基礎表上遵守特定規則時,可以使用 DML 語句(INSERT、UPDATE 和 DELETE)。 另請注意,僅企業版支持聯合分區視圖。
儘管聯合分區視圖可以在任何其他版本上實現,因為它們沒有區分語法,但它們不會被識別為聯合分區視圖。 將視圖識別為跨服務器分區的規則僅適用於企業版。
使用這種分區技術,大多數應用程序的性能通常會提高 20% 到 30%。 因此,如果您的企業管理大量數據,它是一個非常有用的工具。
複製
分區是將數據庫拆分為較小的子集並將分區表分佈到不同的節點,而復制是將數據庫複製到多個數據庫以提供快速查看和更短的響應時間。
PostgreSQL 提供主從復制。 這可以是異步的或同步的。 預寫日誌 (WAL) 允許與副本節點共享更改,從而啟用異步複製。
其他類型的複制主要包括邏輯複製、流複製和物理複製。
- 邏輯複製遵循發布和訂閱模型。 更改基於數據複製的身份,例如其主鍵,而不是其物理位置。
- 流式複製本質上是在文件創建後立即流式傳輸 WAL,從而使備用服務器能夠快速更新,而不是等待文件被填充。
- 最後,物理複製通常是通過文件和目錄實現的,而不考慮物理位置中的內容。 PostgreSQL 本身不提供多主複製,但它可以在其他第三方工具的幫助下執行。
SQL Server 複製將數據從發布服務器複製到訂閱服務器。 它可以是異步的,也可以是異步的,具體取決於 SQL Server 版本。 它提供三種類型的複制,即:事務複製、快照複製和合併複製。

- 事務複製通常是為服務器到服務器的環境實現的,其中修改在發生時從發布者傳遞給訂閱者。
- 合併複製通常在可能發生衝突的情況下實現,對於服務器到客戶端的環境,或者可以在訂閱者或發布者上更改和跟踪數據並隨後進行同步的情況。
- 快照複製是在數據不經常更新、不需要增量更改或數據在特定時刻完全複製時實現的。 此外,企業版提供對等複製作為多主節點複製的替代解決方案。
語言和語法
PostgreSQL 是用 C 語言編寫的,而 MS SQL 是用 C 和 C++ 編寫的。 在語言綁定方面,PostgreSQL 非常易於使用和連接,因為它的外部 API libpq設計和文檔都非常好。
但是,SQL Server 外部語言綁定可能取決於其他幾個因素。 您可能需要安裝額外的驅動程序或創建類來存儲查詢的數據; 因此,您必須知道編譯時數據的樣子。 您可能必須參考文檔,並且跟進可能會相當耗時。
在過程語言功能方面,PostgreSQL 和 SQL Server 都提供了強大的支持。 PostgreSQL 支持 JSON 數據類型,用戶可以輕鬆地將 Python、Java、PHP、Perl 和 R 與 SQL 一起使用,因為它們得到了過程語言特性的支持。
雖然 SQL Server 確實提供了支持,但此功能仍有待改進,因為會出現一些小錯誤,並且可能需要一些時間來實現,因為它很慢。 用戶需要先將代碼編譯成.dll文件。
在 PostgreSQL 中,無需先創建.dll文件。 PostgreSQL 還提供了大量的正則表達式(regex)作為分析工作的基礎。
MS SQL Server 的正則表達式相對較少,並且支持某些命令,例如子字符串和模式索引,這些命令可能不如 PostgreSQL。
表現
在性能方面,PostgreSQL 在幾個方面勝過 SQL Server。 我們談到了分區,雖然 PostgreSQL 和 SQL Server 都提供分區,但 PostgreSQL 免費提供,效率更高。
PostgreSQL 還提供了更好的並發性,這是一個重要的特性,多個進程可以同時訪問和更改共享數據。 PostgreSQL 的 MVCC 特性確保了較小的死鎖機會,僅當兩個查詢嘗試同時修改同一行并序列化對該行的更新時才會阻塞。
查詢數據獲取的 MVCC 鎖與寫入數據獲取的鎖不衝突。 這可以最大限度地減少鎖爭用並在多用戶環境中提供更好的性能。
另一方面,SQL Server 的並發性不夠發達,有些進程甚至會死鎖。 與 MVCC 功能相反,每當更新行時,都會創建該行的新版本,而不是覆蓋同一行,並且兩者都會得到維護。 逐漸地,舊版本移入名為tempdb的系統數據庫。 但是,它的並發性還有很長的路要走。
PostgreSQL 還為幾個擴展提供了索引支持,從而提高了數據庫的性能。
另一方面,SQL 服務器還沒有改進它們的索引實現,它們還沒有包含數組——最常用的變量類型之一。
價錢
PostgreSQL 是在 PostgreSQL 許可證下發布的,這是一個自由的開源許可證。 PostgreSQL 全球開發組仍然致力於使 PostgreSQL 永遠作為免費和開源軟件提供。 沒有計劃在不同的許可證下更改或發布 PostgreSQL。
MS SQL Server 是在商業許可下作為 Microsoft 產品的一部分發布的。 2016 年初,該數據庫作為免費工具提供給開發人員,但它僅支持一個處理器和 1GB 的最大內存。 雖然它是免費的,但它缺少一些企業可能需要的功能。 如果您需要更多服務器,您可能需要為每台服務器支付 899 美元。 最近,SQL Server 企業版售價 13,748 美元。
可擴展性
當數據增加以滿足用戶的需要而不影響其性能時,數據庫系統繼續良好運行的能力稱為可伸縮性。
PostgreSQL 在可擴展性方面提供了許多特性,並且可以使用多個 CPU 內核來快速並行實現查詢。
SQL Server 也可以使用內核,但是標準版本僅限於 24 個 CPU 內核。 企業版允許使用無限的 CPU 內核。 SQL Server 還具有超大規模功能,您可以在其中確定下限和上限,從而根據需要向下和向上擴展。
安全
隨著數據盜竊、黑客攻擊和盜版的興起,安全確實成為數據庫系統中最重要的要求。 但是,SQL Server 和 PostgreSQL 都提供了出色的數據加密和身份驗證。
身份驗證方法
在服務器端,PostgreSQL 提供了先進的身份驗證方法,包括輕量級目錄訪問協議 (LDAP) 和可插拔身份驗證模塊 (PAM),這可能會減少 PostgreSQL 數據庫服務器的攻擊面。 PostgreSQL 的其他服務器級安全增強功能包括 PostgreSQL 服務器偵聽地址、基於主機的身份驗證和證書身份驗證。
在 MS SQL Server 中,有兩種服務器級別的安全增強功能:Windows 身份驗證模式和混合模式,其中包括 Windows Server 和 MS SQL Server 的身份驗證過程。 MS SQL Server 的安全模型是 Windows Server 的 Windows 身份驗證模式與數據庫的緊密集成。
數據加密
PostgreSQL 提供數據加密,並允許您在數據通過 Web 或公共網絡高速公路傳輸時使用安全套接字層 (SSL) 證書。 它還允許您實施客戶端證書身份驗證工具作為選項。 此外,您可以使用加密函數將加密數據存儲在支持對稱密鑰和公鑰加密的 PostgreSQL 中。
在 MS SQL Server 中,可用的數據加密功能包括透明數據加密 (TDE)、始終加密和列級加密。 TDE 使用高級加密標準 (AES) 算法來加密物理文件,其中包括數據和日誌文件。 始終加密的功能允許您在兩種狀態下加密某些列,無論是靜止的還是動態的(即數據在內存中也保持加密)。
用戶級權限
此外,您可以在 PostgreSQL 和 SQL Server 中管理不同的用戶及其權限(讀、寫)。
PostgreSQL 包括作為角色分配的用戶級權限、通過角色的表級權限和角色繼承。 審核選項允許您查看數據庫中用戶和組的數據訪問活動,這提供了額外的安全層。
SQL Server 通過用戶組和角色來實現這一點。 資源權限直接授予用戶帳戶,權限從父資源繼承。
您還可以通過監視和審核 SQL Server 中的活動來識別並發問題、長時間運行的查詢和常規工作負載指標。
貯存
存儲是任何數據庫系統性能的關鍵因素之一。 隨著服務器處理能力和大規模內存支持的提高,數據庫在系統中允許更多的存儲能力幾乎變得至關重要。
PostgreSQL 是一個對象關係數據庫,而 Microsoft SQL Server 是一個關係數據庫系統。 這意味著 PostgreSQL 提供了更複雜的數據類型並允許對象繼承,儘管它也使得使用 PostgreSQL 更加複雜。 它有一個單一的符合 ACID 的存儲引擎,並使用它為每個客戶端連接分配的內存來初始化一個新的系統進程。 因此,隨著系統上客戶端連接的增加,需要分配更多的內存。
SQL Server 2016 及更高版本最多可以使用一百台計算機或虛擬機,每台計算機最多運行五個實例。 但是,這也取決於其版本。 企業版允許最大帶寬,因此將授予更多存儲功能。 雖然最新的標準版允許使用高達 128GB 的內存,但您可以在企業版中使用無限的內存。
支持與社區
PostgreSQL 定期免費發布更新版本。 最近,PostgreSQL 全球開發組發布了對所有受支持的數據庫系統版本的更新,修復了過去三個月報告的超過 55 個錯誤。 PostgreSQL 擁有龐大的開發人員、第三方公司和愛好者社區,他們提供支持並嘗試通過修復報告的錯誤來開發系統。
SQL Server 每隔幾年就會發布一個新版本。 支持費用取決於許可證的條款和條件。 Microsoft SQL Server 也有一個支持社區,數據庫分析師、開發人員、系統管理員或任何對該平台感興趣的人都可以在這裡提問,或者通過播客和網絡廣播(如 Guy Glantser 和 Eitan Blumin 的 SQL Server Radio)了解更多關於 SQL Server 的信息,用戶可以在這裡了解很多有關 SQL Server 及其與其他 Microsoft 工具的兼容性的信息。
PostgreSQL 和 SQL Server 都可以配備插件。 定價和兼容性取決於插件。 插件有助於管理、清理、備份數據庫等。
例如,Adminer 是一個數據管理工具,可用於管理 PostgreSQL 和 MS SQL Server 中的數據。 其他幾個數據庫插件也可用於提高數據庫的效率,即:WP-Optimize、Better Search Replace、WP Database Backup 等等。 當您升級任何數據庫系統時,可能會產生數據遷移成本,但這對於任何其他標準 DBMS 來說都是正常的。

觸發器和事件
PostgreSQL 有各種高級觸發器,您可以根據自己的用例進行選擇。 支持的觸發事件有 AFTER、BEFORE 和 INSTEAD OF,它們可用於 INSERT、UPDATE 和 DELETE 事件來操作數據。 如前所述,PostgreSQL 可以動態運行這些觸發器,在執行之前不需要將它們編譯成.dll文件。 當觸發器被調用時,上述函數可用於執行複雜的查詢。
SQL Server 為不同類型的數據庫事件提供了各種觸發器,即 DML 觸發器、DDL 觸發器和登錄觸發器:
- DML 觸發器或數據操作語言觸發器是用於通過插入、更新或刪除記錄來操作數據的觸發器。
- DDL 觸發器用於數據定義語言 (DDL) 事件,例如創建、刪除或更改數據庫。
- 登錄觸發器用於登錄事件,例如建立用戶會話時。 這些觸發器在成功驗證後和建立用戶會話之前觸發。 它們對於審核和控制登錄活動很有用。
意見
視圖本質上是不物理存儲數據的虛擬表。 它們通常用於安全目的,以限制用戶對數據的訪問。 PostgreSQL 和 SQL Server 都支持可更新視圖。
但是,在 PostgreSQL 中,除非滿足以下先決條件,否則不會自動進行更新:
- 該視圖的查詢中的 FROM 子句中應該有一個部分。 該部分可以來自表或其他可更新視圖。
- 選擇列表中不應有窗口函數、聚合函數或集合返回函數。
- 查詢不能在頂層包含命令 HAVING、LIMIT、DISTINCT、WITH、INTERSECT、EXCEPT、OFFSET 或 LIMIT。
簡而言之,用簡單查詢創建的視圖可以更新,而用複雜查詢創建的視圖幾乎不可能更新。 另一方面,可以使用規則來更新復雜的視圖。 雖然 PostgreSQL 可能不提供運行物化視圖的工具,但它有一個名為matviews的模塊,它可以幫助重建任何物化視圖。
在 SQL Server 中,視圖可以自動更新,同時支持用戶定義和系統定義的視圖。 此外,如果兩個表視圖具有不同的鍵並且更新語句不涉及多個表,則它們會同時更新。
此外,用戶可以利用觸發器來更新復雜的視圖。 SQL Server 還提供了運行物化視圖(也稱為索引視圖)的工具。 Unlike materialized views in other relational databases, indexed views are synced to the underlying data and are thus updated automatically.
Shortcomings of SQL Server and PostgreSQL
While we've discussed all the details on PostgreSQL and SQL Server, both have their drawbacks.
While PostgreSQL is free, it isn't owned by a single organization. Because of that, it has struggled to find footing among the masses, despite being heavily featured. PostgreSQL also focuses on compatibility more than speed. Thus, modifications that are created for speed improvement demand more work.
On the other hand, SQL Server has often been criticized for its poor user interface. It has complex performance tuning features and no native support for source control. If you're using it for your company, the enterprise version may burn a hole in your pocket. SQL Server 2019 enterprise edition alone costs $13,748 — that's like thirteen rooms worth of Ikea furniture! Moreover, the licensing can be quite challenging to comprehend and is continuously changing.
If PostgreSQL and SQL Server aren't quite to your liking, you can try out MongoDB or MariaDB for your unique use case.
MongoDB is a document-oriented, free-to-use, cross-platform database program that can easily leverage JSON-like documents.
MariaDB, on the other hand, is a commercially-supported fork of MySQL whose pluggable and purpose-built storage engines support workloads that generally required a vast variety of different databases.
PostgreSQL vs SQL Server: Which Database Should You Choose?
Both PostgreSQL and SQL Server are widely used relational databases, but who takes the cake? From the above comparisons, PostgreSQL trumps SQL Server in several scenarios. Not only is it open-source and free, but it also has several features that are easily available and can be implemented automatically, unlike Microsoft SQL Server.
Moreover, PostgreSQL has a more suitable concurrency management system. It can brilliantly handle cases where multiple processes can access and modify shared data at the same time.
If you are running a small business, PostgreSQL could be a suitable choice for you as it's free and offers several features that are useful to manage the data. It's easy to install and can be implemented in almost all kinds of operating systems. However, for businesses with a huge investment in the Microsoft SQL Server stack, SQL Server has its benefits over PostgreSQL.
概括
All in all, both PostgreSQL and SQL Server are functional and multifaceted databases. While PostgreSQL can be used for almost any operating system and is suitable for small businesses that require maximum functionality, SQL Server is the best for huge businesses, especially those that require the use of Microsoft products.
In this article, we've covered the major differences between PostgreSQL and SQL Server, and their functions. The “right” choice will eventually come down to how you plan to run your business.
Between PostgreSQL vs SQL Server, which database would you plan on using for your next project, and why? 我們很想听聽您的想法! 在下面的評論部分分享它們。