可以在函數(shù)中使用關(guān)鍵字create temporary table直接創(chuàng)建即可。不過(guò),需要注意的是,要加上if not exists限制,這樣在臨時(shí)表已經(jīng)存在的情況下,臨時(shí)表不會(huì)被再次創(chuàng)建,從而避免執(zhí)行異常。
成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供三門(mén)峽網(wǎng)站建設(shè)、三門(mén)峽做網(wǎng)站、三門(mén)峽網(wǎng)站設(shè)計(jì)、三門(mén)峽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、三門(mén)峽企業(yè)網(wǎng)站模板建站服務(wù),十多年三門(mén)峽做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
示例函數(shù):
create or replace function ads.fn_create_tmp_tb (n integer, s character varying)returns voidas $$begin create local temporary table if not exists tmp_tb_01 (idx integer, user_name character varying); insert into tmp_tb_01 (idx, user_name) select n, s; raise notice '%', (select user_name from tmp_tb_01 where idx = n);end;$$ language plpgsql;示例調(diào)用:
select ads.fn_create_tmp_tb(1, 'Andy'); select ads.fn_create_tmp_tb(2, 'Jack');
創(chuàng)建表
[postgres@web1 data]$ psql -U zhongwc -d zwcdb -h 192.168.1.203 -p 1521
Password for user zhongwc:
psql (9.2.2)
Type "help" for help.
zwcdb= create table t_zhongwc(pid integer,pname varchar(32),constraint zhongwc_pid_pk primary key(pid));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "zhongwc_pid_pk" for table "t_zhongwc"
CREATE TABLE
zwcdb=
zwcdb= select * from t_zhongwc;
pid | pname
-----+-------
(0 rows)
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
{
CREATE GLOBAL TEMP TABLE tmp_report(user_code CHARACTER VARYING,customer_num INTEGER,visit_num INTEGER,visit_success_num INTEGER,visit_complete_rate TEXT,remain_task_num INTEGER, visit_renewals_num INTEGER) ON COMMIT DELETE;
我這個(gè)定義的是 on commit delete,要按照你的場(chǎng)景來(lái),可以on commit drop等,一般我們用臨時(shí)表,都是事務(wù)級(jí)臨時(shí)表,用于臨時(shí)存儲(chǔ)寫(xiě)變量或者集合數(shù)據(jù),主要用戶(hù)報(bào)表分析;
注,如果是在 function 中執(zhí)行這段代碼,建議使用 變量拼接,因?yàn)镈DL有時(shí)候會(huì)有權(quán)限問(wèn)題,如:
v_table_sql := 'CREATE GLOBAL TEMP TABLE tmp_report(user_code CHARACTER VARYING,customer_num INTEGER,visit_num INTEGER,visit_success_num INTEGER,visit_complete_rate TEXT,remain_task_num INTEGER,visit_renewals_num INTEGER) ON COMMIT DELETE';
EXECUTE v_table_sql; (v_table_sql為 聲明的變量)
序列數(shù)可以增加postgresql數(shù)據(jù)表的檢索速度,同時(shí)降低數(shù)據(jù)查詢(xún)時(shí)的資源消耗。那么如何在postgresql中創(chuàng)建序列數(shù)并且應(yīng)用呢?下面我給大家分享一下。
工具/材料
pgAdmin4
創(chuàng)建序列數(shù)
首先打開(kāi)pgAdmin4,展開(kāi)postgresql數(shù)據(jù)庫(kù),找到模式下面的public選項(xiàng),如下圖所示
接下來(lái)在public下面右鍵單擊序列,然后點(diǎn)擊Create下面的sequence選項(xiàng),如下圖所示
在彈出的創(chuàng)建Sequence界面中首先給序列數(shù)起一個(gè)名字,如下圖所示,注意都用英文
然后切換到Definition頁(yè)卡,定義一下序列的增加量,如下圖所示,其中maximum根據(jù)自己的需要進(jìn)行設(shè)置
最后回到數(shù)據(jù)庫(kù)主界面,你會(huì)看到序列下面多出了一個(gè)項(xiàng),這就是我們創(chuàng)建的序列數(shù)了,如下圖所示
在數(shù)據(jù)表中應(yīng)用序列數(shù)
首先選中一個(gè)數(shù)據(jù)表,點(diǎn)擊右側(cè)的編輯按鈕,如下圖所示
在彈出的編輯界面中切換到Columns頁(yè)卡,點(diǎn)擊ID簽名的編輯按鈕,如下圖所示
最后在字段的編輯界面中切換到Variables選項(xiàng)卡,然后在Value列中通過(guò)nextval函數(shù)帶入剛才定義的序列數(shù)即可,如下圖所示
文章名稱(chēng):包含postgresql見(jiàn)表的詞條
當(dāng)前路徑:http://jinyejixie.com/article48/dsdjghp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、、小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)