systables 系统目录表对在数据库(包括系统目录的表和视图)中定义的每个表对象(表、视图、同义词或 GBase 8s 中的序列)包含一行。
列 | 类型 | 解释 | |
---|---|---|---|
tabname | VARCHAR(128) | 表、视图、同义词或序列的名称 | |
owner | CHAR(32) | 表的所有者(系统目录表的用户 gbasedbt 和数据库表的 username) | |
partnum | INTEGER | 物理存储位置代码 | |
tabid | SERIAL | 系统指定的顺序标识编号 | |
rowsize | SMALLINT | 最大行大小,以字节计 ( < 32,768) | |
ncols | SMALLINT | 表中的列数 | |
nindexes | SMALLINT | 表的索引数 | |
nrows | FLOAT | 表中的行数 | |
created | DATE | 创建或上次修改表时的日期 | |
version | INTEGER | 改变表时更改的数字 | |
tabtype | CHAR(1) | 指示表对象类型的代码:
|
|
locklevel | CHAR(1) | 表的锁定方式:
|
|
npused | FLOAT | 数据库服务器曾经在 tablespace 中启动过的数据页数 | |
fextsize | INTEGER | 初始扩展数据块的大小 (KB) | |
nextsize | INTEGER | 所有后续扩展数据块的大小 (KB) | |
flags | SMALLINT | 用于对永久表分类的代码:
|
|
site | VARCHAR(128) | 保留供将来使用 | |
dbname | VARCHAR(128) | 保留供将来使用 | |
type_xid | INTEGER | sysxtdtypes.extended_id 中的代码(对于类型表),或者 0(对于无类型表) | |
am_id | INTEGER | 访问方法代码(sysams 表的关键字)
NULL 或 0 表示内置存储管理器 |
|
ustlowts | DATETIME YEAR TO FRACTION (5) | 上次记录表、行和页计数统计信息的时间 | |
secpolicyid | INTEGER | 已与表连接的安全策略的标识。 NULL 表示不受保护的表 | |
protgranularity | CHAR(1) | LBAC 粒度级别:
|
|
statlevel | CHAR(1) | 统计信息级别
|
|
statchange | SMALLINT | 仅供内部使用 |
为 systables 表中记录的每个表、视图、序列和同义词指定 tabid,它是系统指定的、唯一标识该对象的 SERIAL 值。保留前 99 个 tabid 值用于系统目录。数据库中第一个用户定义的表对象的 tabid 始终为 100。
对 tabid 列建立了索引,且该列只包含唯一值。tabname 和 owner 列的组合索引也需要唯一值。
version 列包含创建新表时存储在 systables 中的已编码数字。当对表执行数据定义的语句(例如,ALTER INDEX、ALTER TABLE、DROP INDEX 和 CREATE INDEX)时,此值的一部分会增大。
在 flags 列中,ST_RAW 表示支持事务日志记录的数据库中的非日志记录永久表。
SQL_LOGICAL_CHAR 参数的设置会编码到描述 VERSION 表的行中的 systables.flags 列值。注意此由系统生成的表的标识中有一个前导空格。
要确定数据库是否启用可将逻辑字符语义应用到字符列声明的 SQL_LOGICAL_CHAR 配置参数,您可以执行以下查询:
SELECT flags INTO $value FROM 'gbasedbt'.systables WHERE tabname = ' VERSION';
SQL_LOGICAL_CHAR = (value & 0x03) + 1此处的 & 是位 AND 运算符。任何大于 1 的 SQL_LOGICAL_CHAR 设置表示创建数据库时已启用 SQL_LOGICAL_CHAR,且字符列的显式或缺省最大大小规范将乘以该设置。
当执行引用数据库表的预编译语句时,会检查版本值以确保自预编译语句以来没有进行任何更改。如果修改了表模式的 DDL 操作更改了版本值并且 SET ENVIRONMENT 语句的 IFX_AUTO_REPREPARE 设置已禁用了自动重新编译,那么不会执行预编译语句,并且必须再次预编译该语句。
npused 列既不反映用于 BYTE 或 TEXT 数据的页数,也不反映 DELETE 或 TRUNCATE 操作中释放的页数。
nrows 列和 npused 列可能无法准确反映由外部表使用的行数和数据页数,除非在创建外部表时指定了 NUMROWS 子句。请参阅《GBase 8s 管理员指南》以获取更多信息。
SELECT * FROM systables WHERE tabid=90 OR tabid=91;