要在查询中引用一个对象(例如,一个表),可以指定一个数据库、一个模式或者两者都指定,或者都不指定。为了解析查询引用的对象,Hubble会按照一组规则扫描适当的命名空间。
为了与PostgreSQL兼容,Hubble支持names的三级结构。这称为命名层次结构。
在命名层次结构中,存储对象的路径包含三个部分:
Hubble集群可以存储多个数据库。每个数据库可以存储多个模式,每个模式可以存储多个表、视图、序列和用户定义的类型。
首次启动集群时,会包含许多预加载的数据库和模式,包括defaultdb
数据库和public
模式。默认情况下,对象(例如,表)存储在当前数据库(默认情况下)中的预加载public
模式中。
要创建新数据库,请使用CREATE DATABASE
语句;要创建新模式,请使用CREATE SCHEMA
语句。所有数据库的列表可以通过SHOW DATABASES
查看,可以使用SHOW SCHEMAS
获取给定数据库的所有模式的列表,可以使用其他SHOW
语句获得给定模式的所有对象的列表。
建议使用模式命名空间,而不是数据库命名空间,来创建命名结构。如果您要升级,请在升级完成后执行以下操作的任意组合:
ALTER TABLE ... RENAME
、ALTER SEQUENCE ... RENAME
、ALTER TYPE ... RENAME
或ALTER VIEW ... RENAME
语句在数据库之间移动对象。要在模式之间移动对象,请使用ALTER TABLE ... SET SCHEMA
、ALTER SEQUENCE ... SET SCHEMA
或ALTER VIEW ... SET SCHEMA
。ALTER TABLE
、ALTER SEQUENCE
、ALTER TYPE
或ALTER VIEW
语句将任何交叉引用对象移动到同一数据库,但不同模式。早期版本允许跨数据库对象引用,以使数据库对象命名层次结构对用户更加灵活。名称解析分别发生以查找现有对象并确定新对象的全名。
查找现有对象的规则如下:
同样,决定新对象全名的规则如下:
当前数据库在名称不合格或只有一个组件前缀时使用。它是database
会话变量的当前值。
SHOW database
查看会话变量的当前值,并使用SET database
更改它。database
为mydb
建立连接。当名称不合格(即没有前缀)时使用搜索路径。它列出了查找对象的模式。它的第一个元素也是创建新对象的当前模式。
SET search_path
设置当前搜索路径并使用SHOW search_path
进行检查。SHOW SCHEMAS
列出的有效模式列表。$user
、public
、pg_catalog
和pg_extension
。为了与PostgreSQL兼容,pg_catalog
必须始终存在search_path
,即使未使用SET search_path
。如果名称没有前缀,则在创建新对象时将当前模式用作目标模式。
search_path
为了与PostgreSQL兼容,当前模式始终是默认第一个值。current_schema()
。hubble支持以下方法来为需要一个索引名称的语句指定索引名称(例如DROP INDEX
、ALTER INDEX ... RENAME
):
@
字符(例如)相对于表名称进行解析DROP INDEX tbl@idx
,这是默认和最常见的语法。idx
的索引的表,例如DROP INDEX idx
或(具有可选模式前缀)DROP INDEX public.idx
;这种语法对于 PostgreSQL兼容性是必要的,因为PostgreSQL索引名称存在于模式命名空间中。