返回首页

gbase数据、南大通用产品文档:GBase8agbase_fetch_field_direct

更新日期:2024年09月11日

 摘要:
给定结果集内某1 列的字段编号,以GBASE_FIELD 结构形式返回列的字段
定义。可以使用该函数检索任意列的定义。字段编号的值应在从0 到
gbase_num_fields(result)-1 的范围内。
 语法:
GBASE_FIELD
*gbase_fetch_field_direct(GBASE_RES
*res,
unsigned
int
fieldnr);
 参数:
 返回值:
对于指定列,返回GBASE_FIELD 结构。



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 15 -

SHOW CREATE PROCEDURE
功能说明
显示给定存储过程的创建语句。
语法格式

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1131
SHOW CREATE PROCEDURE
[vc_name.][database_name.]proc_name;
表5- 129 参数说明
参数名称


vc_name
vc 名,可选项。
database_name
数据库名,可选项。
proc_name
存储过程名。
示例
示例1:显示创建存储过程proc_1 的语句。
gbase> SHOW CREATE PROCEDURE vc1.demo.proc_1\G
*************************** 1. row ***************************
Procedure: proc_1
sql_mode:
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROU
P_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES,NO_ZERO_IN
_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTI
TUTION,PAD_CHAR_TO_FULL_LENGTH
Create Procedure: CREATE DEFINER="root"@"%" PROCEDURE
"proc_1"()
begin
select 1;
end
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (Elapsed: 00:00:00.00)

使用gsql 操作密态数据库
步骤1 以操作系统用户gbase 登录数据库主节点。
步骤2 执行以下命令打开密态开关,连接密态数据库。
gsql -p PORT postgres -r -C
步骤3 创建客户端主密钥CMK 和列加密密钥CEK。具体涉及到的新增创建CMK 的语法
参考《GBase 8c V5_3.0.0_SQL 手册》CREATE CLIENT MASTER KEY 章节,创建的CEK
的语法参考《GBase 8c V5_3.0.0_SQL 手册》CREATE COLUMN ENCRYPTION KEY
--创建客户端加密主密钥(CMK)
postgres=# CREATE CLIENT MASTER KEY ImgCMK1 WITH (KEY_STORE = localkms,
KEY_PATH ="key_path_value1", ALGORITHM = RSA_2048);
postgres=# CREATE CLIENT MASTER KEY ImgCMK WITH (KEY_STORE = localkms,
KEY_PATH ="key_path_value2", ALGORITHM = RSA_2048);
postgres=# CREATE COLUMN ENCRYPTION KEY ImgCEK1 WITH VALUES
(CLIENT_MASTER_KEY = ImgCMK1, ALGORITHM =
AEAD_AES_256_CBC_HMAC_SHA256);
CREATE COLUMN ENCRYPTION KEY
查询存储密钥信息的系统表结果如下。
postgres=# SELECT * FROM gs_client_global_keys;
global_key_name | key_namespace | key_owner |
key_acl |
create_date
-----------------+---------------+-----------+---------+----------------------------
imgcmk1
| 2200
|
10
| 2022-06-06 11:04:00.656617
imgcmk
| 2200
|
10
| 2022-06-06 11:04:05.389746
(2 rows)

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
200
postgres=# SELECT column_key_name,column_key_distributed_id ,global_key_id,key_owner
FROM gs_column_keys;
column_key_name | column_key_distributed_id | global_key_id | key_owner
-----------------+---------------------------+---------------+-----------
imgcmk1
|
|
10
|
2022-06-06 11:04:00.656617
imgcmk
|
|
10
|
2022-06-06 11:04:05.389746
(2 rows)
postgres=# SELECT column_key_name,column_key_distributed_id ,global_key_id,key_owner
FROM gs_column_keys;
column_key_name | column_key_distributed_id | global_key_id | key_owner
-----------------+---------------------------+---------------+-----------
imgcek1
|
760411027
|
16392
|
10
imgcek
|
3618369306 |
16398
|
10
(2 rows)
步骤4 创建加密表。
postgres=# CREATE TABLE creditcard_info (id_number
int, name text encrypted with
(column_encryption_key = ImgCEK, encryption_type = DETERMINISTIC), credit_card
varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type =
DETERMINISTIC));
NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id_number' as the distribution
column by default.
HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE
查询表的详细信息如下,Modifiers 值为encrypted 则表示该列是加密列。
postgres=# \d creditcard_info
Table "public.creditcard_info" Column
|
Type| Modifiers
-------------+-------------------+------------
id_number | integer
name
| text
credit_card | character varying | encrypted
步骤5 向加密表插入数据并进行等值查询。
postgres=# INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');
INSERT 0 1
postgres=# INSERT INTO creditcard_info VALUES (2, 'joy','62199856783491543233');
INSERT 0 1
postgres=# select * from creditcard_info where name = 'joe';
id_number | name |
credit_card
-----------+------+---------------------

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
201
1 | joe | 6217986500001288393
(1 row)
注意:使用非密态客户端查看该加密表数据时是密文
postgres=# select id_number,name from creditcard_info;
id_number | name
-----------+--------------------
1 |
\x011aefabd754ded0a536a96664790622487c4d366d313aecd5839e410a46d29cba96a60e48310
00000ee7905 6a114c9a6c041bb552b78052e912a8b730609142074c63791abebd0d38
2 |
\x011aefabd76853108eb406c0f90e7c773b71648fa6e2b8028cf634b49aec65b4fcfb376f3531000
000f7471c868 6682de215d09aa87113f6fb03884be2031ef4dd967afc6f7901646b
(2 rows)
步骤6 (可选)对加密表进行alter 和update 操作。
postgres=# ALTER TABLE creditcard_info ADD COLUMN age int ENCRYPTED WITH
(COLUMN_ENCRYPTION_KEY = ImgCEK, ENCRYPTION_TYPE = DETERMINISTIC);
ALTER TABLE
postgres=# \d creditcard_info
Table "public.creditcard_info" Column
| Type| Modifiers
-------------+-------------------+------------
id_number | integer
name
| text
credit_card | character varying | encrypted
age
| integer
| encrypted
postgres=# ALTER TABLE creditcard_info DROP COLUMN age;
ALTER TABLE
postgres=# update creditcard_info set credit_card = '154320000011111111' where name = 'joy';
UPDATE 1
postgres=# select * from creditcard_info where name = 'joy';
id_number | name | credit_card
-----------+------+-------------------
2 | joy | 154320000011111111
(1 row)
----结束