返回首页

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

更新日期:2024年09月11日

使用指导
前提条件
连接数据库时使用的用户需要具备访问数据库的权限。
背景信息
使用gsql 命令可以连接数据库。在连接远程数据库时,需要在服务器上设置允许远程

GBase 8c 工具参考手册
南大通用数据技术股份有限公司
12
连接,详细操作请参见《GBase 8c V5_3.0.0_开发者指南》中“3.2.3.2 远程连接数据库”。
操作步骤
步骤1 使用gsql 连接到GBase 8c 服务器。格式为:
gsql -d dbname -p port <-U user_name> <-h hostip>

-d 参数指定要连接到的数据库名称。首次连接可以指定生成的默认数据库postgres。

-p 参数指定通过端口号信息。

-U 参数指定以数据库用户名。缺省默认为gbase。

-h 参数指定数据库节点所在的服务器IP。缺省默认为当前服务器IP。
若未指定数据库名称,
则使用初始化时默认生成的数据库名称;
若未指定数据库用户名,
则默认使用当前操作系统用户作为数据库用户名;当某个值没有前面的参数(-d、-U
等)时,若连接的命令中没有指定数据库名(-d)则该参数会被解释成数据库名;如
果已经指定数据库名(-d)而没有指定数据库用户名(-U)时,该参数则会被解释成
数据库用户名。
示例如下:
#示例1:使用gbase 用户连接到本机postgres 数据库的15400 端口。
[gbase@gbasehost ~]$ gsql -d postgres -p 15400
#示例2:使用jack 用户连接到远程主机postgres 数据库的15400 端口。
[gbase@gbasehost ~]$ gsql -h 10.180.123.163 -d postgres -U jack -p 15400
#示例3:
参数postgres 和gbase 不属于任何选项时,
分别被解释成了数据库名和用户名。
[gbase@gbasehost ~]$ gsql postgres gbase -p 15400
#等效于
[gbase@gbasehost ~]$ gsql -d postgres -U gbase -p 15400
详细的gsql 参数请参见命令参考。
步骤2 执行SQL 语句。
例如,创建数据库human_staff:
gbase=# CREATE DATABASE human_staff;

GBase 8c 工具参考手册
南大通用数据技术股份有限公司
13
CREATE DATABASE
通常,输入的命令行在遇到分号的时候结束。
如果输入的命令行没有错误,结果就会输
出到屏幕上。
步骤3 执行gsql 元命令。
首先创建一个表空间,例如EXAMPLE:
gbase=# CREATE TABLESPACE EXAMPLE RELATIVE LOCATION 'tablespace1/tablespace_1';
CREATE TABLESPACE
然后创建模式,例如HR:
gbase=# CREATE schema HR;
CREATE SCHEMA
以把一个查询分成多行输入为例。注意提示符的变化:
gbase=# CREATE TABLE HR.areaS(
gbase(# area_ID NUMBER,area_NAME VARCHAR2(25)
gbase(# )
gbase-# tablespace EXAMPLE;
CREATE TABLE
查看表的定义:
gbase=# \d HR.areaS
Table "hr.areas"
Column
|
Type
| Modifiers
-----------+-----------------------+-----------
area_id
| numeric
|
area_name | character varying(25) |
Tablespace: "example"
向HR.areaS 表插入数据:
gbase=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (1,'Europe'),(2,
'Americas'),(3, 'Asia'),(4, 'Middle East and Africa');
INSERT 0 4
切换提示符:
gbase=# \set PROMPT1 '%n@%m %~%R%#'
gbase@local gbase=#

GBase 8c 工具参考手册
南大通用数据技术股份有限公司
14
查看表:
gbase@local gbase=# SELECT * FROM HR.areaS;
area_id |
area_name
---------+------------------------
1 | Europe
2 | Americas
3 | Asia
4 | Middle East and Africa
(4 rows)
可以用\pset 命令以不同的方法显示表:
gbase@local gbase=# \pset border 2
Border style is 2
gbase@local gbase=# SELECT * FROM HR.areaS;
+---------+------------------------+
| area_id |
area_name
|
+---------+------------------------+
|
1 | Europe
|
|
2 | Americas
|
|
3 | Asia
|
|
4 | Middle East and Africa |
+---------+------------------------+
(4 rows)
gbase@local gbase=# \pset border 0
Border style is 0.
gbase@local gbase=# SELECT * FROM HR.areaS;
area_id
area_name
------- ----------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
(4 rows)
使用元命令:
gbase@local gbase=# \a \t \x
Output format is unaligned.
Showing only tuples.
Expanded display is on.

GBase 8c 工具参考手册
南大通用数据技术股份有限公司
15
gbase@local gbase=# SELECT * FROM HR.areaS;
area_id|1
area_name|Europe
area_id|2
area_name|Americas
area_id|3
area_name|Asia
area_id|4
area_name|Middle East and Africa
gbase@local gbase=#

Execute 权限使得用户能够调用例程。通过 EXECUTE 或 CALL 语句,或通过使用表达
式中的函数可能调用例程。
下列用户拥有缺省的 Execute 权限,
这使得他们能够调用例程:


在缺省情况下,任何具有 DBA 权限的用户都可执行数据库中的任何例程。

如果以限定的 CREATE DBA FUNCTION 或 CREATE DBA PROCEDURE 语句
注册该例程,则仅拥有 DBA 权限的用户对那个例程有缺省的 Execute 权限。

如果数据库不符合 ANSI,则用户 public(任何拥有 Connect 数据库权限的用户)
自动地拥有对例程的 Execute 权限,未以 DBA 关键字注册该例程。

在符合 ANSI 的数据库中,过程所有者和任何拥有 DBA 权限的用户都可执行该
例程,而无需收到附加的权限。

授予和撤销 Execute 权限
例程有下列 GRANT 和 REVOKE 要求:

DBA 可将 Execute 权限授予数据库中的任何例程,也可撤销它。

例程的创建者可授予或取消对那个特定的例程的 Execute 权限。通过包括带有
GRANT EXECUTE ON 语句的 AS grantor 子句,创建者丧失授予或撤销的能力。

如果所有者在 GRANT EXECUTE ON 语句中应用了 WITH GRANT 关键字,
则另
一用户可授予 Execute 权限。
对于下列条件,DBA 或例程所有者必须显式地将 Execute 权限授予非 DBA 用户:

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 319 -


以 DBA 关键字子句注册了的例程

在符合 ANSI 的数据库中的例程

不符合 ANSI 的数据库中的例程,但将 NODEFDAC 环境变量设置为 yes。
即使数据库服务器缺省地将权限授予 public,所有者也可限制对例程的 Execute 权限。为
此,请发出 REVOKE EXECUTE ON PUBLIC 语句。DBA 和所有者仍可执行该例程,且
如果使用的话,则可将 Execute 权限授予特定的用户。
使用 COMMUTATOR 和 NEGATOR 函数的 Execute 权限
重要: 如果您显式地授予对 SPL 函数的 Execute 权限,其为 UDR 的换向函数或否定函数,
则在被授予者可使用任意函数之前,您还必须授予对换向函数或否定函数的那种权限。您不可
随同 SPL 过程指定 COMMUTATOR 或 NEGATOR 修饰符。
下列示例演示对于函数的限制授权,以及将它的否定函数限定为一组用户。假设您创建下
列否定函数对:
CREATE FUNCTION greater(y PERCENT, z PERCENT)
RETURNS BOOLEAN
NEGATOR= less(y PERCENT, z PERCENT);
. . .
CREATE FUNCTION less(y PERCENT, z PERCENT)
RETURNS BOOLEAN
NEGATOR= greater(y PERCENT, z PERCENT);
在缺省情况下,任何用户都可执行该函数和否定函数。下列函数仅允许 accounting 执行这
些函数:
REVOKE EXECUTE ON FUNCTION greater FROM PUBLIC;
REVOKE EXECUTE ON FUNCTION less FROM PUBLIC;
GRANT accounting TO mary, jim, ted;
GRANT EXECUTE ON FUNCTION greater TO accounting;
GRANT EXECUTE ON FUNCTION less TO accounting;
用户可能接收附带 WITH GRANT OPTION 授权的 Execute 权限来将 Execute 权限授予
其他用户。如果用户失去对例程的 Execute 权限,则还从通过那个用户授予了 Execute 权
限的那些用户撤销 Execute 权限。
要获取更多信息,请参阅《GBase 8s SQL 指南:语法》 中的 GRANT 和 REVOKE 语句
描述。

支持调用的上下文环境:

支持在PLSQL 的存储过程内使用COMMIT/ROLLBACK/SAVEPOINT。

支持含有EXCEPTION 的存储过程使用COMMIT/ROLLBACK/SAVEPOINT。

支持在存储过程的EXCEPTION 语句内使用COMMIT/ROLLBACK/SAVEPOINT。

支持在事务块里调用含有COMMIT/ROLLBACK/SAVEPOINT 的存储过程,即通过
/BEGIN/START/END 等开启控制的外部事务。

支持在子事务中调用含有SAVEPOINT 的存储过程,即存储过程中使用外部定义的
SAVEPOINT,回退事务状态到存储过程外定义的SAVEPOINT 位置。

支持存储过程外部对存储过程内定义的SAVEPOINT 可见,
即存储过程外可以将事务修
改回滚到存储过程中定义SAVEPOINT 的位置。

支持多数PLSQL 的上下文和语句内调用COMMIT/ROLLBACK/SAVEPOINT,包括常
用的IF/FOR/CURSOR LOOP/WHILE。

支持存储过程返回值与简单表达式计算中调用含有
COMMIT/ROLLBACK/SAVEPOINT 的存储过程或者函数。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
663
支持提交/回滚的内容:

支持DDL 在COMMIT/ROLLBACK 后的提交/回滚。

支持DML 的COMMIT/ROLLBACK 后的提交。

支持存储过程内GUC 参数的回滚提交。