要在查询中引用一个对象(例如,一个表),可以指定一个数据库、一个模式或者两者都指定,或者都不指定。为了解析查询引用的对象,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索引名称存在于模式命名空间中。