内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

關(guān)于postgresql用法的信息

如何使用 PostgreSQL 數(shù)據(jù)庫去 O

1、安裝postgresql

10余年的宣州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整宣州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“宣州網(wǎng)站設(shè)計(jì)”,“宣州網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

yum install postgresql postgresql-server

mysql占用端口3306 pgsql是5432

2、導(dǎo)入整個數(shù)據(jù)庫

psql -U postgres(用戶名) 數(shù)據(jù)庫名(缺省時同用戶名) /data/dum.sql

3、導(dǎo)出整個數(shù)據(jù)庫

pg_dump -h localhost -U postgres(用戶名) 數(shù)據(jù)庫名(缺省時同用戶名) /data/dum.sql

4、導(dǎo)出某個表

pg_dump -h localhost -U postgres(用戶名) 數(shù)據(jù)庫名(缺省時同用戶名) -t table(表名) /data/dum.sql

5、壓縮方法

一般用dump導(dǎo)出數(shù)據(jù)會比較大,推薦使用xz壓縮

壓縮方法 xz dum.sql 會生成 dum.sql.xz 的文件

6、xz壓縮數(shù)據(jù)倒數(shù)數(shù)據(jù)庫方法

xzcat /data/dum.sql.xz | psql -h localhost -U postgres(用戶名) 數(shù)據(jù)庫名(缺省時同用戶名)

PostgreSQL 中 sequence 的用法

sequence 是 pg 自帶的高效的自增id工具(也叫序列)。sequence 使用了輕量級鎖的方式來做到高效自增id的,所以會比 UPDATE 行鎖快。sequence 的返回?cái)?shù)據(jù)類型默認(rèn)是64位的整數(shù),pg 10 可以自定 smallint, integer 或者是 bigint。

sequence 是可以保證自增數(shù)據(jù)不重復(fù)的,也就是說每次自增后都會持久化保存,那么為了繼續(xù)提高性能,可以加上 CACHE 參數(shù)(默認(rèn)為1),每個進(jìn)程(連接)可以緩存一個子序列在當(dāng)前進(jìn)程內(nèi)存里面,當(dāng)子序列用完了才會去原序列取新的子序列。

這個用個例子簡單說一下,創(chuàng)建 sequence temp_seq3 時用了 CACHE 10,A session 可以獲取到的值是 1...10,B session 可以獲取到的值是 11...20,那么獲取順序可能是 (A, A, B, A),返回值是 (1, 2, 11, 3),這個不是嚴(yán)格自增的序列,但可以保證回次返回都是唯一的,用了 CYCLE 參數(shù)的除外。

根據(jù)文檔和源碼( link 第80行),緩存在內(nèi)存里面的最大值(cached)是每個進(jìn)程都不一樣的,所以如果要求嚴(yán)格自增的服務(wù)不能用 CACHE。

這里寫三種用 pg 做自增id的方式

測試命令,在 MacOS 上用 docker 開一個 pg 在里面運(yùn)行一下 pgbench 腳本,其中 sql.sql 的內(nèi)容替換成對應(yīng)的壓測腳本。

TPS: 986

TPS: 7332

TPS: 7451

看看微信的分布式id生成器,原理都差不多,"實(shí)際應(yīng)用中每次提升的步長為10000" = "CACHE 10000"。 link

以上優(yōu)化已經(jīng)是用在友好速搭電商系統(tǒng)的訂單號和優(yōu)惠券號生成服務(wù)中,為商家提供更快更可靠的服務(wù)。

如何使用postgresql數(shù)據(jù)庫

打開軟件,進(jìn)入界面中。

雙擊“PostgresSQL 9.3”連接服務(wù)器

方法一:右鍵單擊“postgres”,選擇“新建對象”--新建數(shù)據(jù)庫,設(shè)置新的數(shù)據(jù)庫的參數(shù),所有者一般默認(rèn)為“postgres”

新建完后,不能立即看到界面上更新的數(shù)據(jù),需要點(diǎn)擊界面上的更新按鈕才能夠看到數(shù)據(jù)庫的變化情況。

方法二:在插件中輸入SQL語言,運(yùn)行命令

6

方法三:點(diǎn)擊面板上的“執(zhí)行任意的SQL查詢”

postgresql 建立索引

一、索引的類型:

PostgreSQL提供了多種索引類型:B-Tree、Hash、GiST和GIN,由于它們使用了不同的算法,因此每種索引類型都有其適合的查詢類型,缺省時,CREATE INDEX命令將創(chuàng)建B-Tree索引。

1. B-Tree:

CREATE TABLE test1 (

id integer,

content varchar

);

CREATE INDEX test1_id_index ON test1 (id);

B-Tree索引主要用于等于和范圍查詢,特別是當(dāng)索引列包含操作符" 、=和"作為查詢條件時,PostgreSQL的查詢規(guī)劃器都會考慮使用B-Tree索引。在使用BETWEEN、IN、IS NULL和IS NOT NULL的查詢中,PostgreSQL也可以使用B-Tree索引。然而對于基于模式匹配操作符的查詢,如LIKE、ILIKE、~和 ~*,僅當(dāng)模式存在一個常量,且該常量位于模式字符串的開頭時,如col LIKE 'foo%'或col ~ '^foo',索引才會生效,否則將會執(zhí)行全表掃描,如:col LIKE '%bar'。

2. Hash:

CREATE INDEX name ON table USING hash (column);

散列(Hash)索引只能處理簡單的等于比較。當(dāng)索引列使用等于操作符進(jìn)行比較時,查詢規(guī)劃器會考慮使用散列索引。

這里需要額外說明的是,PostgreSQL散列索引的性能不比B-Tree索引強(qiáng),但是散列索引的尺寸和構(gòu)造時間則更差。另外,由于散列索引操作目前沒有記錄WAL日志,因此一旦發(fā)生了數(shù)據(jù)庫崩潰,我們將不得不用REINDEX重建散列索引。

3. GiST:

GiST索引不是一種單獨(dú)的索引類型,而是一種架構(gòu),可以在該架構(gòu)上實(shí)現(xiàn)很多不同的索引策略。從而可以使GiST索引根據(jù)不同的索引策略,而使用特定的操作符類型。

4. GIN:

GIN索引是反轉(zhuǎn)索引,它可以處理包含多個鍵的值(比如數(shù)組)。與GiST類似,GIN同樣支持用戶定義的索引策略,從而可以使GIN索引根據(jù)不同的索引策略,而使用特定的操作符類型。作為示例,PostgreSQL的標(biāo)準(zhǔn)發(fā)布中包含了用于一維數(shù)組的GIN操作符類型,如:、=、等。

二、復(fù)合索引:

PostgreSQL中的索引可以定義在數(shù)據(jù)表的多個字段上,如:

CREATE TABLE test2 (

major int,

minor int,

name varchar

}

CREATE INDEX test2_mm_idx ON test2 (major, minor);

1. B-Tree類型的復(fù)合索引:

在B-Tree類型的復(fù)合索引中,該索引字段的任意子集均可用于查詢條件,不過,只有當(dāng)復(fù)合索引中的第一個索引字段(最左邊)被包含其中時,才可以獲得最高效率。

2. GiST類型的復(fù)合索引:

在GiST類型的復(fù)合索引中,只有當(dāng)?shù)谝粋€索引字段被包含在查詢條件中時,才能決定該查詢會掃描多少索引數(shù)據(jù),而其他索引字段上的條件只是會限制索引返回的條目。假如第一個索引字段上的大多數(shù)數(shù)據(jù)都有相同的鍵值,那么此時應(yīng)用GiST索引就會比較低效。

3. GIN類型的復(fù)合索引:

與B-Tree和GiST索引不同的是,GIN復(fù)合索引不會受到查詢條件中使用了哪些索引字段子集的影響,無論是哪種組合,都會得到相同的效率。

使用復(fù)合索引應(yīng)該謹(jǐn)慎。在大多數(shù)情況下,單一字段上的索引就已經(jīng)足夠了,并且還節(jié)約時間和空間。除非表的使用模式非常固定,否則超過三個字段的索引幾乎沒什么用處。

三、組合多個索引:

PostgreSQL可以在查詢時組合多個索引(包括同一索引的多次使用),來處理單個索引掃描不能實(shí)現(xiàn)的場合。與此同時,系統(tǒng)還可以在多個索引掃描之間組成AND和OR的條件。比如,一個類似WHERE x = 42 OR x = 47 OR x = 53 OR x = 99的查詢,可以被分解成四個獨(dú)立的基于x字段索引的掃描,每個掃描使用一個查詢子句,之后再將這些掃描結(jié)果OR在一起并生成最終的結(jié)果。另外一個例子是,如果我們在x和y上分別存在獨(dú)立的索引,那么一個類似WHERE x = 5 AND y = 6的查詢,就會分別基于這兩個字段的索引進(jìn)行掃描,之后再將各自掃描的結(jié)果進(jìn)行AND操作并生成最終的結(jié)果行。

為了組合多個索引,系統(tǒng)掃描每個需要的索引,然后在內(nèi)存里組織一個BITMAP,它將給出索引掃描出的數(shù)據(jù)在數(shù)據(jù)表中的物理位置。然后,再根據(jù)查詢的需要,把這些位圖進(jìn)行AND或者OR的操作并得出最終的BITMAP。最后,檢索數(shù)據(jù)表并返回?cái)?shù)據(jù)行。表的數(shù)據(jù)行是按照物理順序進(jìn)行訪問的,因?yàn)檫@是位圖的布局,這就意味著任何原來的索引的排序都將消失。如果查詢中有ORDER BY子句,那么還將會有一個額外的排序步驟。因?yàn)檫@個原因,以及每個額外的索引掃描都會增加額外的時間,這樣規(guī)劃器有時候就會選擇使用簡單的索引掃描,即使有多個索引可用也會如此。

四、唯一索引:

CREATE UNIQUE INDEX name ON table (column [, ...]);

五、表達(dá)式索引:

表達(dá)式索引主要用于在查詢條件中存在基于某個字段的函數(shù)或表達(dá)式的結(jié)果與其他值進(jìn)行比較的情況,如:

SELECT * FROM test1 WHERE lower(col1) = 'value';

此時,如果我們僅僅是在col1字段上建立索引,那么該查詢在執(zhí)行時一定不會使用該索引,而是直接進(jìn)行全表掃描。如果該表的數(shù)據(jù)量較大,那么執(zhí)行該查詢也將會需要很長時間。解決該問題的辦法非常簡單,在test1表上建立基于col1字段的表達(dá)式索引,如:

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));

SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';

和上面的例子一樣,盡管我們可能會為first_name和last_name分別創(chuàng)建獨(dú)立索引,或者是基于這兩個字段的復(fù)合索引,在執(zhí)行該查詢語句時,這些索引均不會被使用,該查詢能夠使用的索引只有我們下面創(chuàng)建的表達(dá)式索引。

CREATE INDEX people_names ON people ((first_name || ' ' || last_name));

CREATE INDEX命令的語法通常要求在索引表達(dá)式周圍書寫圓括弧,就像我們在第二個例子里顯示的那樣。如果表達(dá)式只是一個函數(shù)調(diào)用,那么可以省略,就像我們在第一個例子里顯示的那樣。

從索引維護(hù)的角度來看,索引表達(dá)式要相對低效一些,因?yàn)樵诓迦霐?shù)據(jù)或者更新數(shù)據(jù)的時候,都必須為該行計(jì)算表達(dá)式的結(jié)果,并將該結(jié)果直接存儲到索引里。然而在查詢時,PostgreSQL就會把它們看做WHERE idxcol = 'constant',因此搜索的速度等效于基于簡單索引的查詢。通常而言,我們只是應(yīng)該在檢索速度比插入和更新速度更重要的場景下使用表達(dá)式索引。

六、部分索引:

部分索引(partial index)是建立在一個表的子集上的索引,而該子集是由一個條件表達(dá)式定義的(叫做部分索引的謂詞)。該索引只包含表中那些滿足這個謂詞的行。

由于不是在所有的情況下都需要更新索引,因此部分索引會提高數(shù)據(jù)插入和數(shù)據(jù)更新的效率。然而又因?yàn)椴糠炙饕绕胀ㄋ饕。虼丝梢愿玫奶岣叽_實(shí)需要索引部分的查詢效率。見以下三個示例:

1. 索引字段和謂詞條件字段一致:

CREATE INDEX access_log_client_ip_ix ON access_log(client_ip)

WHERE NOT (client_ip inet '192.168.100.0' AND client_ip inet '192.168.100.255');

下面的查詢將會用到該部分索引:

SELECT * FROM access_log WHERE url = '/index.html' AND client_ip = inet '212.78.10.32';

下面的查詢將不會用該部分索引:

一個不能使用這個索引的查詢可以是

SELECT * FROM access_log WHERE client_ip = inet '192.168.100.23';

2. 索引字段和謂詞條件字段不一致:

PostgreSQL支持帶任意謂詞的部分索引,唯一的約束是謂詞的字段也要來自于同樣的數(shù)據(jù)表。注意,如果你希望你的查詢語句能夠用到部分索引,那么就要求該查詢語句的條件部分必須和部分索引的謂詞完全匹配。 準(zhǔn)確說,只有在PostgreSQL能夠識別出該查詢的WHERE條件在數(shù)學(xué)上涵蓋了該索引的謂詞時,這個部分索引才能被用于該查詢。

CREATE INDEX orders_unbilled_index ON orders(order_nr) WHERE billed is not true;

下面的查詢一定會用到該部分索引:

SELECT * FROM orders WHERE billed is not true AND order_nr 10000;

那么對于如下查詢呢?

SELECT * FROM orders WHERE billed is not true AND amount 5000.00;

這個查詢將不像上面那個查詢這么高效,畢竟查詢的條件語句中沒有用到索引字段,然而查詢條件"billed is not true"卻和部分索引的謂詞完全匹配,因此PostgreSQL將掃描整個索引。這樣只有在索引數(shù)據(jù)相對較少的情況下,該查詢才能更有效一些。

下面的查詢將不會用到部分索引。

SELECT * FROM orders WHERE order_nr = 3501;

3. 數(shù)據(jù)表子集的唯一性約束:

CREATE TABLE tests (

subject text,

target text,

success boolean,

...

);

CREATE UNIQUE INDEX tests_success_constraint ON tests(subject, target) WHERE success;

該部分索引將只會對success字段值為true的數(shù)據(jù)進(jìn)行唯一性約束。在實(shí)際的應(yīng)用中,如果成功的數(shù)據(jù)較少,而不成功的數(shù)據(jù)較多時,該實(shí)現(xiàn)方法將會非常高效。

七、檢查索引的使用:

見以下四條建議:

1. 總是先運(yùn)行ANALYZE。

該命令將會收集表中數(shù)值分布狀況的統(tǒng)計(jì)。在估算一個查詢返回的行數(shù)時需要這個信息,而規(guī)劃器則需要這個行數(shù)以便給每個可能的查詢規(guī)劃賦予真實(shí)的開銷值。如果缺乏任何真實(shí)的統(tǒng)計(jì)信息,那么就會使用一些缺省數(shù)值,這樣肯定是不準(zhǔn)確的。因此,如果還沒有運(yùn)行ANALYZE就檢查一個索引的使用狀況,那將會是一次失敗的檢查。

2. 使用真實(shí)的數(shù)據(jù)做實(shí)驗(yàn)。

用測試數(shù)據(jù)填充數(shù)據(jù)表,那么該表的索引將只會基于測試數(shù)據(jù)來評估該如何使用索引,而不是對所有的數(shù)據(jù)都如此使用。比如從100000行中選1000行,規(guī)劃器可能會考慮使用索引,那么如果從100行中選1行就很難說也會使用索引了。因?yàn)?00行的數(shù)據(jù)很可能是存儲在一個磁盤頁面中,然而沒有任何查詢規(guī)劃能比通過順序訪問一個磁盤頁面更加高效了。與此同時,在模擬測試數(shù)據(jù)時也要注意,如果這些數(shù)據(jù)是非常相似的數(shù)據(jù)、完全隨機(jī)的數(shù)據(jù),或按照排序順序插入的數(shù)據(jù),都會令統(tǒng)計(jì)信息偏離實(shí)際數(shù)據(jù)應(yīng)該具有的特征。

3. 如果索引沒有得到使用,那么在測試中強(qiáng)制它的使用也許會有些價(jià)值。有一些運(yùn)行時參數(shù)可以關(guān)閉各種各樣的查詢規(guī)劃。

4. 強(qiáng)制使用索引用法將會導(dǎo)致兩種可能:一是系統(tǒng)選擇是正確的,使用索引實(shí)際上并不合適,二是查詢計(jì)劃的開銷計(jì)算并不能反映現(xiàn)實(shí)情況。這樣你就應(yīng)該對使用和不使用索引的查詢進(jìn)行計(jì)時,這個時候EXPLAIN ANALYZE命令就很有用了。

當(dāng)前標(biāo)題:關(guān)于postgresql用法的信息
分享URL:http://m.rwnh.cn/article18/dsdhjgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、服務(wù)器托管網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
奉化市| 大名县| 福安市| 平原县| 德庆县| 信丰县| 亚东县| 宝应县| 德保县| 和田市| 宜良县| 洛浦县| 伊金霍洛旗| 策勒县| 峨边| 宽甸| 扶绥县| 阿尔山市| 临沧市| 沙坪坝区| 牙克石市| 民勤县| 武陟县| 闽侯县| 博爱县| 开鲁县| 胶州市| 额济纳旗| 仙居县| 广东省| 峨眉山市| 古蔺县| 竹山县| 邮箱| 平顺县| 盐源县| 泰顺县| 博客| 长乐市| 潮州市| 咸丰县|