可以在函数中使用关键字create temporary table直接创建即可。不过,需要注意的是,要加上if not exists限制,这样在临时表已经存在的情况下,临时表不会被再次创建,从而避免执行异常。
成都创新互联专业为企业提供三门峡网站建设、三门峡做网站、三门峡网站设计、三门峡网站制作等企业网站建设、网页设计与制作、三门峡企业网站模板建站服务,十多年三门峡做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
示例函数:
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;示例调用:
select ads.fn_create_tmp_tb(1, 'Andy'); select ads.fn_create_tmp_tb(2, 'Jack');
创建表
[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 中添加相应的系统表头文件
./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 头文件中添加系统表的唯一性索引
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;
我这个定义的是 on commit delete,要按照你的场景来,可以on commit drop等,一般我们用临时表,都是事务级临时表,用于临时存储写变量或者集合数据,主要用户报表分析;
注,如果是在 function 中执行这段代码,建议使用 变量拼接,因为DDL有时候会有权限问题,如:
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为 声明的变量)
序列数可以增加postgresql数据表的检索速度,同时降低数据查询时的资源消耗。那么如何在postgresql中创建序列数并且应用呢?下面我给大家分享一下。
工具/材料
pgAdmin4
创建序列数
首先打开pgAdmin4,展开postgresql数据库,找到模式下面的public选项,如下图所示
接下来在public下面右键单击序列,然后点击Create下面的sequence选项,如下图所示
在弹出的创建Sequence界面中首先给序列数起一个名字,如下图所示,注意都用英文
然后切换到Definition页卡,定义一下序列的增加量,如下图所示,其中maximum根据自己的需要进行设置
最后回到数据库主界面,你会看到序列下面多出了一个项,这就是我们创建的序列数了,如下图所示
在数据表中应用序列数
首先选中一个数据表,点击右侧的编辑按钮,如下图所示
在弹出的编辑界面中切换到Columns页卡,点击ID签名的编辑按钮,如下图所示
最后在字段的编辑界面中切换到Variables选项卡,然后在Value列中通过nextval函数带入刚才定义的序列数即可,如下图所示
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款