真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于postgresql解析的信息

PostgreSQL查詢SQL語義分析(1)—解析查詢對(duì)象addRangeTableEntry

本文主要介紹PG在執(zhí)行查詢時(shí),對(duì)SQL的語義分析重寫過程中的查詢對(duì)象解析過程,處理的函數(shù)為addRangeTableEntry,分析查詢對(duì)象信息。

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、昌樂網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

本函數(shù)是解析查詢 (包含增刪改查操作) 執(zhí)行過程中涉及的查詢對(duì)象 (表、視圖、子查詢等) 的信息。

每次調(diào)用只解析一個(gè)對(duì)象。

1、通過觀察addRangeTableEntry的執(zhí)行過程,了解SQL語義解析transformFromClause的處理過程。

2、表結(jié)構(gòu)信是從緩存中結(jié)構(gòu)讀取,然后獲取自己需要的信息。

3、語義分析后轉(zhuǎn)換為relid(關(guān)聯(lián)對(duì)象id),提升查詢執(zhí)行的處理效率。

postgresql和mysql的區(qū)別

特性 MySQL PostgreSQL

實(shí)例 通過執(zhí)行 MySQL 命令(mysqld)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫。一臺(tái)服務(wù)器可以運(yùn)行多個(gè) mysqld 實(shí)例。一個(gè)實(shí)例管理器可以監(jiān)視 mysqld 的各個(gè)實(shí)例。

通過執(zhí)行 Postmaster 進(jìn)程(pg_ctl)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫,這些數(shù)據(jù)庫組成一個(gè)集群。集群是磁盤上的一個(gè)區(qū)域,這個(gè)區(qū)域在安裝時(shí)初始化并由一個(gè)目錄組成,所有數(shù)據(jù)都存儲(chǔ)在這個(gè)目錄中。使用 initdb 創(chuàng)建第一個(gè)數(shù)據(jù)庫。一臺(tái)機(jī)器上可以啟動(dòng)多個(gè)實(shí)例。

數(shù)據(jù)庫 數(shù)據(jù)庫是命名的對(duì)象集合,是與實(shí)例中的其他數(shù)據(jù)庫分離的實(shí)體。一個(gè) MySQL 實(shí)例中的所有數(shù)據(jù)庫共享同一個(gè)系統(tǒng)編目。 數(shù)據(jù)庫是命名的對(duì)象集合,每個(gè)數(shù)據(jù)庫是與其他數(shù)據(jù)庫分離的實(shí)體。每個(gè)數(shù)據(jù)庫有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫共享 pg_databases。

數(shù)據(jù)緩沖區(qū) 通過 innodb_buffer_pool_size 配置參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。這個(gè)參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個(gè)緩沖區(qū)來緩存表的數(shù)據(jù)和索引。在專用的數(shù)據(jù)庫服務(wù)器上,這個(gè)參數(shù)最高可以設(shè)置為機(jī)器物理內(nèi)存量的 80%。 Shared_buffers 緩存。在默認(rèn)情況下分配 64 個(gè)緩沖區(qū)。默認(rèn)的塊大小是 8K。可以通過設(shè)置 postgresql.conf 文件中的 shared_buffers 參數(shù)來更新緩沖區(qū)緩存。

數(shù)據(jù)庫連接 客戶機(jī)使用 CONNECT 或 USE 語句連接數(shù)據(jù)庫,這時(shí)要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 客戶機(jī)使用 connect 語句連接數(shù)據(jù)庫,這時(shí)要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。

身份驗(yàn)證 MySQL 在數(shù)據(jù)庫級(jí)管理身份驗(yàn)證。 基本只支持密碼認(rèn)證。 PostgreSQL 支持豐富的認(rèn)證方法:信任認(rèn)證、口令認(rèn)證、Kerberos 認(rèn)證、基于 Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證

加密 可以在表級(jí)指定密碼來對(duì)數(shù)據(jù)進(jìn)行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對(duì)列數(shù)據(jù)進(jìn)行加密和解密??梢酝ㄟ^ SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。 可以使用 pgcrypto 庫中的函數(shù)對(duì)列進(jìn)行加密/解密??梢酝ㄟ^ SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。

審計(jì) 可以對(duì) querylog 執(zhí)行 grep。 可以在表上使用 PL/pgSQL 觸發(fā)器來進(jìn)行審計(jì)。

查詢解釋 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃。 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃。

備份、恢復(fù)和日志 InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務(wù)恢復(fù)。需要第三方軟件才能支持熱備份。 在數(shù)據(jù)目錄的一個(gè)子目錄中維護(hù)寫前日志。支持在線和離線完全備份以及崩潰、時(shí)間點(diǎn)和事務(wù)恢復(fù)。 可以支持熱備份。

JDBC 驅(qū)動(dòng)程序 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。

表類型 取決于存儲(chǔ)引擎。例如,NDB 存儲(chǔ)引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 支持臨時(shí)表、常規(guī)表以及范圍和列表類型的分區(qū)表。不支持哈希分區(qū)表。 由于PostgreSQL的表分區(qū)是通過表繼承和規(guī)則系統(tǒng)完成了,所以可以實(shí)現(xiàn)更復(fù)雜的分區(qū)方式。

索引類型 取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-樹、哈希、R-樹和 Gist 索引。

約束 支持主鍵、外鍵、惟一和非空約束。對(duì)檢查約束進(jìn)行解析,但是不強(qiáng)制實(shí)施。 支持主鍵、外鍵、惟一、非空和檢查約束。

存儲(chǔ)過程和用戶定義函數(shù) 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲(chǔ)過程可以用 SQL 和 C++ 編寫。用戶定義函數(shù)可以用 SQL、C 和 C++ 編寫。 沒有單獨(dú)的存儲(chǔ)過程,都是通過函數(shù)實(shí)現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。

觸發(fā)器 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器語句用過程語言復(fù)合語句編寫。 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器過程用 C 編寫。

系統(tǒng)配置文件 my.conf Postgresql.conf

數(shù)據(jù)庫配置 my.conf Postgresql.conf

客戶機(jī)連接文件 my.conf pg_hba.conf

XML 支持 有限的 XML 支持。 有限的 XML 支持。

數(shù)據(jù)訪問和管理服務(wù)器 OPTIMIZE TABLE —— 回收未使用的空間并消除數(shù)據(jù)文件的碎片

myisamchk -analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)(MyISAM 存儲(chǔ)引擎)

mysql —— 命令行工具

MySQL Administrator —— 客戶機(jī) GUI 工具 Vacuum —— 回收未使用的空間

Analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)

psql —— 命令行工具

pgAdmin —— 客戶機(jī) GUI 工具

并發(fā)控制 支持表級(jí)和行級(jí)鎖。InnoDB 存儲(chǔ)引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務(wù)級(jí)設(shè)置隔離級(jí)別。 支持表級(jí)和行級(jí)鎖。支持的 ANSI 隔離級(jí)別是 Read Committed(默認(rèn) —— 能看到查詢啟動(dòng)時(shí)數(shù)據(jù)庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務(wù)啟動(dòng)之前提交的結(jié)果)。使用 SET TRANSACTION 語句在事務(wù)級(jí)設(shè)置隔離級(jí)別。使用 SET SESSION 在會(huì)話級(jí)進(jìn)行設(shè)置。

MySQL相對(duì)于PostgreSQL的劣勢(shì):

MySQL

PostgreSQL

最重要的引擎InnoDB很早就由Oracle公司控制。目前整個(gè)MySQL數(shù)據(jù)庫都由Oracle控制。

BSD協(xié)議,沒有被大公司壟斷。

對(duì)復(fù)雜查詢的處理較弱,查詢優(yōu)化器不夠成熟

很強(qiáng)大的查詢優(yōu)化器,支持很復(fù)雜的查詢處理。

只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。

都支持

PostgreSQL查詢SQL的語法分析(1)——詞法分析

postgreSQL命令的詞法分析和語法分析是由Unix工具Yacc和Lex制作的。使用的是 Bison 和

Flex。

詞法分析和語法分析依賴的文件定義在src\backend\parser下的scan.l和gram.y。其中:

在raw_parser函數(shù)(在src/backend/parser/parser.c下)中,主要通過調(diào)用Lex和Yacc配合生成的base_yyparse函數(shù)來實(shí)現(xiàn)詞法分析和語法分析的工作。

其他的重要源碼文件:

輔助腳本:

SQL關(guān)鍵字定義及查找函數(shù)

SQL關(guān)鍵字列表

因?yàn)椴檎沂遣捎枚植檎曳?。如果添加關(guān)鍵字,需要保持name的順序。

AntDB/PostgreSQL內(nèi)部原理:表Page結(jié)構(gòu)解析

PostgreSQL 中 Page 是一個(gè)磁盤 Block 上的一個(gè)抽象結(jié)構(gòu),用于描述 Block 內(nèi)部的數(shù)據(jù)結(jié)構(gòu)與組織形式。

所有數(shù)據(jù)塊在讀寫時(shí),必須按 Page 格式進(jìn)行訪問操作。

PostgreSQL 11 的 Page 格式(包含 3 行數(shù)據(jù))如下:

行指針之前的 Page Header 總空間消耗為: (64 + 16 * 6 + 32) bit / 8 = 24 Byte

以下分別對(duì)這些結(jié)構(gòu)以及對(duì)應(yīng)的標(biāo)志位的值進(jìn)行說明:

Tuple 類型和行中各列數(shù)據(jù)的頭部信息共享相同的數(shù)據(jù)結(jié)構(gòu),所以可以用相同的方法來構(gòu)建和檢查。但需求略有不同,數(shù)據(jù)不需要事務(wù)可見性信息,它需要一個(gè)長度字段和一些嵌入式類型信息。我們可以通過覆蓋 Heap Tuple 上的 xmin/cmin/xmax/cmax/xvac 字段來實(shí)現(xiàn)數(shù)據(jù)上的需求。

Heap tuple 的頭部信息,為了避免空間浪費(fèi),應(yīng)該將字段以一種避免結(jié)構(gòu)擴(kuò)充的方式來布局。

通常,內(nèi)存中所有的 tuples 都會(huì)使用數(shù)據(jù)字段進(jìn)行初始化,當(dāng)一個(gè) tuple 需要寫入表中時(shí),事務(wù)相關(guān)的字段將會(huì)被寫入,并覆蓋數(shù)據(jù)字段。

Heap tuple 的整體結(jié)構(gòu)包括:

通過 pageinspect 擴(kuò)展模塊,可以在低層次觀察 page 中的實(shí)際數(shù)據(jù),而不用考慮事務(wù)及相關(guān)可見性限制,這通常用于 DEBUG 目的的數(shù)據(jù)研究。

其常用函數(shù)說明如下:

創(chuàng)建模塊

創(chuàng)建測(cè)試表

查看 Page Header

數(shù)據(jù)含義解析:

查看 Page 中的記錄(Tuple)

數(shù)據(jù)含義解析:

解析 Tuple 數(shù)據(jù)

嘗試多次更新同一條一條數(shù)據(jù)

再次查看頁面數(shù)據(jù)

數(shù)據(jù)含義解析:

刪除一條數(shù)據(jù)

再次查看頁面數(shù)據(jù)

數(shù)據(jù)含義解析:

通過跟蹤 t_xmin, t_xmax, t_ctid 三個(gè)字段的變化,可以得到 Tuple 數(shù)據(jù)的多版本變化歷史,這也是 PostgreSQL 的 MVCC 實(shí)現(xiàn)原理

PostgreSQL 的多版本(MVCC)與 Oracle 有很大的不同,在于其將多版本信息與表數(shù)據(jù)存儲(chǔ)在一起,這種多版本實(shí)現(xiàn)方式有其優(yōu)勢(shì)與局限性。

優(yōu)勢(shì)

劣勢(shì)

postgreSQL的json解析(20.6.1)

已","分割json

增加key,value:形式方便取值

通過-鍵值對(duì)名稱取json值

PostgreSQL集群篇——PostgreSQL的配置文件解析

日常中我們進(jìn)行安裝PostgreSQL后都需要對(duì)其進(jìn)行配置基礎(chǔ)配置,以便其能有效發(fā)揮出服務(wù)器的性能,下面是我進(jìn)行整理后的postgresql.conf配置文件的相關(guān)注釋,方便大家對(duì)于各個(gè)屬性進(jìn)行熟悉。


文章名稱:關(guān)于postgresql解析的信息
鏈接URL:http://weahome.cn/article/dscjcsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部