如何使用 SQL 列出 Informix 中特定数据库的模式?
How to list schemas of a specific database in Informix using SQL?
在 Informix 中获取特定数据库中模式名称列表的查询是什么?
架构属于用户。您可以列出来自 the sysusers system catalog 的所有可用用户:
SELECT username FROM "informix".sysusers;
因为只有 DBA
s 和 Resource
权限允许用户发出 CREATE SCHEMA
statement,我们可以像这样限制查询:
SELECT username FROM "informix".sysusers WHERE usertype IN ('D', 'R');
另一个解决方案是仅列出实际创建了 tables 的用户;为此,您可以查询 the systables system catalog 并列出不同的所有者。
SELECT DISTINCT owner FROM FROM "informix".systables
正如@JonathanLeffler 评论的那样,用户可能已被授予 RESOURCE
权限并创建了 table,然后成为 'demoted' 到 CONNECT
权限。用户仍将拥有 table。因此,第二种解决方案是最准确的。
模式在 Informix 数据库中并不常用,并且在数据库中几乎没有可跟踪性。支持 CREATE SCHEMA 表示法,因为它是 SQL-89 的一部分。 AUTHORIZATION 子句用于确定使用 CREATE SCHEMA 语句创建的对象的(默认)'owner'。没有什么可以阻止单个用户多次 运行 CREATE SCHEMA 语句,无论是连续的还是在广泛不同的时间(在 Informix 实例中的任何给定数据库中)。
CREATE SCHEMA AUTHORIZATION "pokemon"
CREATE TABLE gizmo (s SERIAL NOT NULL PRIMARY KEY, v VARCHAR(20) NOT NULL)
CREATE TABLE widget(t SERIAL NOT NULL PRIMARY KEY, d DATETIME YEAR TO SECOND NOT NULL)
;
CREATE SCHEMA AUTHORIZATION "pokemon"
CREATE TABLE object (u SERIAL NOT NULL PRIMARY KEY, i INTEGER NOT NULL)
CREATE TABLE "pikachu".complain (C SERIAL NOT NULL PRIMARY KEY, v VARCHAR(255) NOT NULL)
;
在执行 CREATE SCHEMA 语句后,无法跟踪这些表中的任何一对是作为同一模式的一部分一起创建的;没有办法知道 "pikachu".complain
是代表 "pokemon"
执行的 CREATE SCHEMA 语句的一部分。没有需要此类支持的 DROP SCHEMA 语句。
在 Informix 中获取特定数据库中模式名称列表的查询是什么?
架构属于用户。您可以列出来自 the sysusers system catalog 的所有可用用户:
SELECT username FROM "informix".sysusers;
因为只有 DBA
s 和 Resource
权限允许用户发出 CREATE SCHEMA
statement,我们可以像这样限制查询:
SELECT username FROM "informix".sysusers WHERE usertype IN ('D', 'R');
另一个解决方案是仅列出实际创建了 tables 的用户;为此,您可以查询 the systables system catalog 并列出不同的所有者。
SELECT DISTINCT owner FROM FROM "informix".systables
正如@JonathanLeffler 评论的那样,用户可能已被授予 RESOURCE
权限并创建了 table,然后成为 'demoted' 到 CONNECT
权限。用户仍将拥有 table。因此,第二种解决方案是最准确的。
模式在 Informix 数据库中并不常用,并且在数据库中几乎没有可跟踪性。支持 CREATE SCHEMA 表示法,因为它是 SQL-89 的一部分。 AUTHORIZATION 子句用于确定使用 CREATE SCHEMA 语句创建的对象的(默认)'owner'。没有什么可以阻止单个用户多次 运行 CREATE SCHEMA 语句,无论是连续的还是在广泛不同的时间(在 Informix 实例中的任何给定数据库中)。
CREATE SCHEMA AUTHORIZATION "pokemon"
CREATE TABLE gizmo (s SERIAL NOT NULL PRIMARY KEY, v VARCHAR(20) NOT NULL)
CREATE TABLE widget(t SERIAL NOT NULL PRIMARY KEY, d DATETIME YEAR TO SECOND NOT NULL)
;
CREATE SCHEMA AUTHORIZATION "pokemon"
CREATE TABLE object (u SERIAL NOT NULL PRIMARY KEY, i INTEGER NOT NULL)
CREATE TABLE "pikachu".complain (C SERIAL NOT NULL PRIMARY KEY, v VARCHAR(255) NOT NULL)
;
在执行 CREATE SCHEMA 语句后,无法跟踪这些表中的任何一对是作为同一模式的一部分一起创建的;没有办法知道 "pikachu".complain
是代表 "pokemon"
执行的 CREATE SCHEMA 语句的一部分。没有需要此类支持的 DROP SCHEMA 语句。