成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PG全局臨時表插件的使用

IT那活兒 / 3373人閱讀
PG全局臨時表插件的使用
  背  景 

PostgreSQL目前12版本只支持本地臨時表不支持全局臨時表特性 ,會話退出后臨時表定義和數(shù)據(jù)被刪除,在我們PG遷移之后業(yè)務(wù)需要用到全局臨時表,為了完成這個需求,我們是采用PG的一個全局臨時表插件pgtt-2.1來實現(xiàn)的。


全局臨時表插件的安裝部署


一.  安裝

[root@test-telepg-01 ~]# su - telepg
[telepg@test-telepg-01 ~]$ cd /tmp
[telepg@test-telepg-01 tmp]$ wget https://codeload.github.com/darold/pgtt/tar.gz/v2.1
[telepg@test-telepg-01 tmp]$ tar -zxvf pgtt-2.1.tar.gz
[telepg@test-telepg-01 tmp]$ cd pgtt-2.1
臨時生效環(huán)境變量
export POSTGRES_HOME=/app/pg/pg_2_18803/postgresql
export ORACLE_HOME=/opt/oracle/product/18c/dbhome_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$POSTGRES_HOME/lib:$POSTGRES_HOME/lib/postgresql:$POSTGRES_HOME/plugin:$ORACLE_HOME/lib
export PROJ_LIB="$POSTGRES_HOME/share/proj"
export PATH=$PATH:$POSTGRES_HOME/bin

編譯安裝

[telepg@test-telepg-01 pgtt-2.1]$ make
[telepg@test-telepg-01 pgtt-2.1]$ make install

查看三個pgtt相關(guān)文件(有證明編譯安裝好了,可以下一步,否則沒有編譯安裝好,需要重新編譯安裝)

[telepg@test-telepg-01 pgtt-2.1]$ ll /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt*
-rw-r--r-- 1 telepg telepg 824 Apr 2 14:47 /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt--2.1.0.sql
-rw-r--r-- 1 telepg telepg 177 Apr 2 14:47 /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt.control

[telepg@test-telepg-01 pgtt-2.1]$ ll /app/pg/pg_2_18803/postgresql/lib/postgresql/pgtt.so
-rwxr-xr-x 1 telepg telepg 43520 Apr 2 14:47 /app/pg/pg_2_18803/postgresql/lib/postgresql/pgtt.so


二.  配置

非超級用戶使用臨時表需做如下設(shè)置

[telepg@test-telepg-01 pgtt-2.1]$ export libdir=$(pg_config --pkglibdir)
[telepg@test-telepg-01 pgtt-2.1]$ sudo mkdir $libdir/plugins/
[telepg@test-telepg-01 pgtt-2.1]$ cd $libdir/plugins/

--進不去就用root用戶進/app/pg/pg_2_18803/postgresql/lib/postgresql/plugins/

[telepg@test-telepg-01 pgtt-2.1]$ sudo ln -s ../pgtt.so/
[root@test-telepg-01 plugins]# ll pgtt.so 
lrwxrwxrwx 1 root root 10 Apr 2 14:58 pgtt.so -> ../pgtt.so

運行單元測試用例

$ make installcheck
/opt/pg122/lib/postgresql/pgxs/src/makefiles/../../src/test/regress/pg_regr ess ‐‐inputdir=.
/ ‐‐bindir=/opt/pg122/bin ‐‐inputdir=test ‐‐dbname=cont rib_regression
00_init 01_oncommitdelete 02_oncommitpreserve 03_createont runcate 04_rename
05_useindex 06_createas 07_createlike 08_plplgsql 09_tr ansaction 10_foreignkey 11_partition
(using postmaster on Unix socket, port 6000)
============== dropping database "contrib_regression" ============== DROP DATABASE
============== creating database "contrib_regression" ============== CREATE DATABASE
ALTER DATABASE
============== running regression test queries test 00_init ... ok 44 ms

test 01_oncommitdelete test 02_oncommitpreserve test 03_createontruncate

ok 39 ms
ok 35 ms
ok 40 ms

test 04_rename test 05_useindex test 06_createas test 07_createlike test 08_plplgsql

ok 63 ms
ok 52 ms
ok 37 ms
ok 54 ms
ok 40 ms

test 09_transaction test 10_foreignkey test 11_partition

ok 40 ms
ok 15 ms
ok 8 ms

======================
All 12 tests passed.
======================

單個數(shù)據(jù)庫永久啟用(off為關(guān)閉)

su - telepg
cd /app/telepg
. p3_18803env
c sscyy
alter database sscyy set pgtt.enabled to on;

Session級別的啟用(off為關(guān)閉)

set pgtt.enabled to on;

創(chuàng)建擴展插件

c sscyy
create extension pgtt;


全局臨時表的使用


1. 創(chuàng)建全局臨時表ON COMMIT PRESERVE

postgres=# c ksl ksl
ksl=> show search_path;
search_path
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
"$user", public
(1 row)

----加載動態(tài)庫文件,數(shù)據(jù)庫重啟之后需要重新load
ksl=> load $libdir/plugins/pgtt;
LOAD

ksl=> show search_path;
search_path
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
public,pgtt_schema
(1 row)

-----使用load加載之后自動的修改了search_path
-----同時需要注意pgtt_schema要放在最后。


CREATE /*GLOBAL*/ TEMPORARY TABLE test(
id integer,
lbl text
) ON COMMIT PRESERVE ROWS;

ksl=> insert into test values(1,data1);
INSERT 0 1

ksl=> select * from test;
id | lbl
‐‐‐‐+‐‐‐‐‐‐‐
1 | data1
(1 row)

再打開一個session連接查看

postgres=# set search_path to public,pgtt_schema;
SET
postgres=# c ksl ksl

ksl=> select * from test;
id | lbl
‐‐‐‐+‐‐‐‐‐
(0 rows)
可以看到表結(jié)構(gòu)是存在的,數(shù)據(jù)為空


2. 創(chuàng)建全局臨時表ON COMMIT DELETE

ksl=> load$libdir/plugins/pgtt
LOAD

CREATE /*GLOBAL*/ TEMPORARY TABLE test2 (
id integer, lbl text
) ON COMMIT DELETE ROWS
;

ksl=> begin;
BEGIN
ksl=> insert into test2 values(2,data2);
INSERT 0 1
ksl=> select * from test2;
id | lbl
‐‐‐‐+‐‐‐‐‐‐‐
2 | data2
(1 row)

ksl=> commit;
COMMIT
ksl=> select * from test2;
id | lbl
‐‐‐‐+‐‐‐‐‐
(0 rows)


3. 刪除全局臨時表

與刪除普通表沒有任何區(qū)別,需要超級用戶權(quán)限

ksl# load ’$libdir/plugins/pgtt
LOAD
ksl=# drop table test2 ;
DROP TABLE

同時需要檢查下pg_global_temp_tables表是否刪除成功
select * from pg_global_temp_tables where relname=test2;


4. 創(chuàng)建索引

需要超級用戶權(quán)限

ksl=# CREATE INDEX ON test (id);
CREATE INDEX

ksl=# d test
Unlogged table "pgtt_schema.test" 
Column | Type | Collation | Nullable | Default
‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐
id | integer | | | 
lbl | text | | | 
Indexes:
”test_id_idx”btree (id)


5.  添加約束

ksl=> load$libdir/plugins/pgtt’
LOAD

CREATE /*GLOBAL*/ TEMPORARY TABLE test3 (
c1 serial PRIMARY KEY,
c2 VARCHAR (50) UNIQUE NOT NULL,
c3 boolean DEFAULT false
);

但不支持外鍵(也不支持分區(qū)表)

CREATE /*GLOBAL*/ TEMPORARY TABLE test4 (
c1 int,
FOREIGN KEY (c1) REFERENCES tb1 (id)
);

ERROR: attempt to create referential integrity constraint on global tempora ry table
CONTEXT: SQL statement "CREATE UNLOGGED TABLE pgtt_schema.test4 ( c1 int,
FOREIGN KEY (c1) REFERENCES tb1 (id)
)"


  總  結(jié) 


  1. 普通用戶使用安裝的時候需要創(chuàng)建軟連接(見配置)。

  2. 每次創(chuàng)建全局臨時表需要先load。

  3. 該插件支持約束,不支持外鍵和分區(qū)表。

  4. 全局臨時表建議不要隨便drop,當(dāng)然沒有用過的全局臨時表隨便drop。


END


更多精彩干貨分享

點擊下方名片關(guān)注

IT那活兒

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/129923.html

相關(guān)文章

  • 初識Postgres-XL

    摘要:所有節(jié)點中分為三種角色全局事務(wù)管理器協(xié)調(diào)器和數(shù)據(jù)節(jié)點。一旦故障,整個集群立刻無法訪問,此時可以切換到節(jié)點上。 第一節(jié) 簡介Postgres-XL是一款開源的PG集群軟件,XL代表eXtensible Lattice,即可擴展的PG格子之意,以下簡稱PGXL。官方稱其既適合寫操作壓力較大的OLTP應(yīng)用,又適合讀操作為主的大數(shù)據(jù)應(yīng)用。它的前身是Postgres-XC(簡稱PGXC),...

    JasinYip 評論0 收藏0
  • PostgreSQL 自動分區(qū)分維護管理插件 pathman 基礎(chǔ)使用

    摘要:使用數(shù)據(jù)庫會自動的根據(jù)從某幾個片中讀取數(shù)據(jù)。更加詳細的請參考德哥文章 官方地址:https://github.com/postgrespr...關(guān)于pathman的原理和優(yōu)化問題,請移步至https://yq.aliyun.com/article... 檢查環(huán)境變量如果直接執(zhí)行psql命令提示command not found則執(zhí)行下面的命令設(shè)置環(huán)境變量 root@host# PA...

    MASAILA 評論0 收藏0
  • 【PHP7源碼分析】PHP中$_POST揭秘

    摘要:和進程的啟動過程類似,啟動過程有種進程角色啟動進程進程和進程。直到請求到來,將連接賦值給對象的字段。注當(dāng)進程執(zhí)行完后會再次調(diào)用函數(shù),準備監(jiān)聽新的請求。當(dāng)讀取到的時,會調(diào)用函數(shù)對進行解析,將中的以及存儲到結(jié)構(gòu)體中。 運營研發(fā)團隊 季偉濱 一、前言 前幾天的工作中,需要通過curl做一次接口測試。讓我意外的是,通過$_POST竟然無法獲取到Content-Type是application...

    sf190404 評論0 收藏0
  • PostgreSQL對接SequoiaDB

    摘要:是一款開源的數(shù)據(jù)庫,支持標(biāo)準,用戶可以通過驅(qū)動連接進行應(yīng)用程序開發(fā)。本文就針對如何擴展功能,實現(xiàn)對接進行介紹。直接在中修改配置文件,只能在當(dāng)前中生效,重新登錄需要重新設(shè)置。 PostgreSQL是一款開源的SQL數(shù)據(jù)庫,支持標(biāo)準SQL,用戶可以通過JDBC驅(qū)動連接PostgreSQL進行應(yīng)用程序開發(fā)。用戶通過擴展PostgreSQL功能,讓開發(fā)者可以使用SQL語句訪問SequoiaDB...

    TZLLOG 評論0 收藏0
  • PostgreSQL實踐一:初識

    摘要:每個服務(wù)由多個進程組成,為首的進程名為。服務(wù)使用字節(jié)長的內(nèi)部事務(wù)標(biāo)識符,即時發(fā)生重疊后仍然繼續(xù)使用,這會導(dǎo)致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。 簡介和認知 發(fā)音 post-gres-q-l 服務(wù)(server) 一個操作系統(tǒng)中可以啟動多個postgres服務(wù)。每個服務(wù)由多個進程組成,為首的進程名為p...

    yibinnn 評論0 收藏0
  • Docker 部署 Kong 網(wǎng)關(guān)

    摘要:自定義配置文件鏡像的配置文件路徑為如需自定義配置文件,自行掛載即可。配置項手冊管理網(wǎng)關(guān)的的使用教程這里就不寫了,自行覓食吧簡單的看看下面這篇可以的集成插件服務(wù)網(wǎng)關(guān) Kong 鏡像: https://hub.docker.com/_/kong 官網(wǎng)給定的用戶安裝手冊上并沒有設(shè)置 PG 的密碼,導(dǎo)致如下問題無法啟動 nginx: [error] init_by_lua error: /us...

    zhouzhou 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<