PostgreSQL
10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有千陽(yáng)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的 POSTGRES,版本 4.2為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。 POSTGRES 領(lǐng)先的許多概念只是在非常遲的時(shí)候才出現(xiàn)在商業(yè)數(shù)據(jù)庫(kù)中。
PostgreSQL 是最初的伯克利的代碼的一個(gè)開放源碼的繼承人。
它支持大部分 SQL:2003 標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性:復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制
同樣,PostgreSQL 可以用許多方法擴(kuò)展,比如, 通過增加新的:數(shù)據(jù)類型、函數(shù)、操作符、聚集函數(shù)、索引方法、過程語(yǔ)言
并且,因?yàn)樵S可證的靈活,任何人都可以以任何目的免費(fèi)使用,修改,和分發(fā) PostgreSQL, 不管是私用,商用,還是學(xué)術(shù)研究使用。
使用PostGIS提供的st_asmvt函數(shù)返回MapBox格式的矢量切片時(shí),PostGIS報(bào)錯(cuò) missing libprotobuf-c ,為了解決這個(gè)問題,需要從源碼編譯postgis,添加對(duì)protobuf的支持,特此記錄。
通過yum安裝postgresql10 ,安裝目錄/var/lib/pgsql/10
yum install -y gcc gcc-c++
本節(jié)簡(jiǎn)單介紹了XLOG全局(所有進(jìn)程之間)共享的數(shù)據(jù)結(jié)構(gòu):XLogCtlData和XLogCtlInsert。在這兩個(gè)結(jié)構(gòu)體中,存儲(chǔ)了REDO point/Lock等相關(guān)重要的信息.
XLogCtlInsert
WAL插入記錄時(shí)使用的共享數(shù)據(jù)結(jié)構(gòu)
XLogCtl
XLOG的所有共享內(nèi)存狀態(tài)信息
跟蹤任意一個(gè)后臺(tái)進(jìn)程,打印全局變量XLogCtl.
其中:
1.XLogCtl-Insert是XLogCtlInsert結(jié)構(gòu)體變量.
2.RedoRecPtr為5510830896 - 1/48789B30,該值與pg_control文件中的REDO location相對(duì)應(yīng).
3.ThisTimeLineIDPrevTimeLineID,時(shí)間線ID,值為1.
其他相關(guān)信息可對(duì)照結(jié)構(gòu)體定義閱讀.
PostgreSQL 源碼解讀(4)- 插入數(shù)據(jù)#3(heap_insert)
PG Source Code
1) 在catalog 的makefile 中添加相應(yīng)的系統(tǒng)表頭文件
./src/backend/catalog/Makefile:42: pg_foreign_table.h pg_partition_key.h \
2) 建表 -- 以pg_partition_key為例:
2.1)在include的 catalog目錄下添加這張表的定義
#ifndef PG_PARTITION_KEY_H
#define PG_PARTITION_KEY_H
#include 'catalog/genbki.h'
#define PartitionKeyRelationId 3180
CATALOG(pg_partition_key,3180) BKI_WITHOUT_OIDS
{
Oid pkrelid;
int16 pkattnum;
} FormData_pg_partition_key;
typedef FormData_pg_partition_key *Form_pg_partition_key;
#define Natts_pg_partition_key ?? 2
#define Anum_pg_partition_key_pkrelid ?? 1
#define Anum_pg_partition_key_pkattnum 2
#endif
2.2) 在catalog 的indexing.h 頭文件中添加系統(tǒng)表的唯一性索引
DECLARE_UNIQUE_INDEX(pg_partition_key_relid_index, 3181, on pg_partition_key using btree(pkrelid oid_ops));
#define PartitionKeyRelidIndexId 3181 r3) Syscache -- 以 pg_partion_key為例:
3.1)首先要在syscache.h中添加 SysCacheIdentifier
3.2) 要在syscache.c 的 cacheinfo[] 中添加這張表
cache的定義:
struct cachedesc
{
PostgreSQL安裝:一、windows下安裝過程
安裝介質(zhì):postgresql-9.1.3-1-windows.exe(46M),安裝過程非常簡(jiǎn)單,過程如下:
1、開始安裝:
2、選擇程序安裝目錄:
注:安裝 PostgreSQL 的分區(qū)最好是 NTFS 格式的。PostgreSQL 首要任務(wù)是要保證數(shù)據(jù)的完整性,而 FAT 和 FAT32 文件系統(tǒng)不能提供這樣的可靠性保障,而且 FAT 文件系統(tǒng)缺乏安全性保障,無法保證原始數(shù)據(jù)在未經(jīng)授權(quán)的情況下被更改。此外,PostgreSQL 所使用的"多分點(diǎn)"功能完成表空間的這一特征在FAT文件系統(tǒng)下無法實(shí)現(xiàn)。
然而,在某些系統(tǒng)中,只有一種 FAT 分區(qū),這種情況下,可以正常安裝 PostgreSQL,但不要進(jìn)行數(shù)據(jù)庫(kù)的初始化工作。安裝完成后,在 FAT 分區(qū)上手動(dòng)執(zhí)行 initdb.exe 程序即可,但不能保證其安全性和可靠性,并且建立表空間也會(huì)失敗。
3、選擇數(shù)據(jù)存放目錄:
4、輸入數(shù)據(jù)庫(kù)超級(jí)用戶和創(chuàng)建的OS用戶的密碼
注:數(shù)據(jù)庫(kù)超級(jí)用戶是一個(gè)非管理員賬戶,這是為了減少黑客利用在 PostgreSQL 發(fā)現(xiàn)的缺陷對(duì)系統(tǒng)造成損害,因此需要對(duì)數(shù)據(jù)庫(kù)超級(jí)用戶設(shè)置密碼,如下圖所示,安裝程序自動(dòng)建立的服務(wù)用戶的用戶名默認(rèn)為 postgres。
5、設(shè)置服務(wù)監(jiān)聽端口,默認(rèn)為5432
6、選擇運(yùn)行時(shí)語(yǔ)言環(huán)境
注:選擇數(shù)據(jù)庫(kù)存儲(chǔ)區(qū)域的運(yùn)行時(shí)語(yǔ)言環(huán)境(字符編碼格式)。
在選擇語(yǔ)言環(huán)境時(shí),若選擇"default locale"會(huì)導(dǎo)致安裝不正確;同時(shí),PostgreSQL 不支持 GBK 和 GB18030 作為字符集,如果選擇其它四個(gè)中文字符集:中文繁體 香港(Chinese[Traditional], Hong Kong S.A.R.)、中文簡(jiǎn)體 新加坡(Chinese[Simplified], Singapore)、中文繁體 臺(tái)灣(Chinese[Traditional], Taiwan)和中文繁體 澳門(Chinese[Traditional], Marco S.A.R.),會(huì)導(dǎo)致查詢結(jié)果和排序效果不正確。建議選擇"C",即不使用區(qū)域。
----我選擇了default localt,安裝正確;建議選擇default localt。
7、安裝過程(2分鐘).
8、安裝完成.
本節(jié)簡(jiǎn)單介紹了PG查詢邏輯優(yōu)化中的子查詢鏈接(subLink),以EXISTS子鏈接為例介紹了子查詢鏈接上拉主函數(shù)處理邏輯以及使用gdb跟蹤分析。
上一節(jié)介紹了ANY子鏈接,本節(jié)介紹了EXISTS子鏈接.
為便于方便解析,根據(jù)日志分析,得出查詢樹如下圖所示:
convert_EXISTS_sublink_to_join函數(shù)源碼:
相關(guān)數(shù)據(jù)結(jié)構(gòu)
1、Var
XX_one_pos
依賴的函數(shù)
simplify_EXISTS_query
OffsetVarNodes
IncrementVarSublevelsUp
IncrementVarSublevelsUp
pull_varnos
contain_vars_of_level
query_tree_walker
OffsetVarNodes_walker
query_or_expression_tree_walker
pull_varnos_walker
contain_vars_of_level_walker
expression_tree_walker