在PostgreSQL中使用SET search_path有什么用?

rslzwgfq  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(6)|浏览(695)

我在使用Apache AGE时,遇到了一个代码:

SET search_path = ag_catalog, "$user", public;

有人能解释一下这三个部分的含义吗?还有什么其他的价值观可以采取这些?

qnyhuwrf

qnyhuwrf1#

这基本上是用来设置Apache Age中的搜索路径。“search_path”是一个变量,它决定了在数据库模式中搜索对象的顺序。
'ag_catalog' :这里Apache age存储它的系统目录和元数据。
"$user" :这是指名称为当前用户的模式。

'public':

这是指Apache时代所有用户都可以访问的默认模式。

omtl5h9j

omtl5h9j2#

这里使用SET search_path是为了设置'ag_catalog'模式,以便在默认情况下将对象创建到模式中。分配的三个变量都是基于用户确定的优先级排序的架构。
ag_catalog是具有AGE系统目录的模式,"$user"是与当前用户同名的模式,public是默认的公共模式。
此外,每当引用对象时,都会遍历搜索路径,直到找到匹配的对象。

bwleehnv

bwleehnv3#

PostgreSQL中有不同的模式或命名空间。在每个模式中可以有许多表。表通常由非限定名引用,非限定名仅由表名组成。系统通过遵循搜索路径来确定哪个表是指要查找的模式列表。搜索路径中的第一个匹配表被认为是所需的表。如果搜索路径中没有匹配项,则会报告错误,即使数据库中的其他架构中存在匹配的表名。

SET search_path = ag_catalog, "$user", public;

特定搜索查询的搜索流将按照ag_catalog、“$user”、public的顺序。

n1bvdmb6

n1bvdmb64#

使用以下命令设置Apache Age的模式:

CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;

要创建图形,请使用位于ag_catalog名称空间中的create_graph函数。

SELECT create_graph('graph_name');

要创建单个顶点,请使用CREATE子句。
SELECT * FROM cypher('graph_name ',$$ CREATE(n)$$)as(v agtype);
例如:

SELECT * FROM cypher('mygraph', $$
    CREATE (n:Person {name: 'John Doe', age: 30})
$$) as (v agtype);
kq0g1dla

kq0g1dla5#

该代码设置PostgreSQL中当前会话的模式搜索路径。搜索路径指定PostgreSQL在不同模式中查找表和对象的顺序。

wko9yo5t

wko9yo5t6#

SET search_path命令用于设置PostgreSQL中会话的默认模式搜索路径。在ApacheAge中,此命令还用于指定模式的顺序,以搜索未限定的对象名称,如表和视图。
当数据库中有多个模式时,指定搜索路径可以使您不必在查询中完全限定对象名称。这使得查询更高效、更易于编写。
要指定要在Apache Age中搜索的架构,可以使用以下命令:

SET search_path = ag_catalog, "$user", public;

此命令设置搜索路径,首先在ag_catalog模式中查找对象,然后是当前用户的模式(由$user表示),最后是公共模式。public schema是PostgreSQL中的默认schema。
通过将ag_catalog添加到搜索路径,可以简化查询。例如,而不是写:

SELECT * FROM ag_catalog.create_graph('Graph_Name');

你可以简单地写:

SELECT * FROM create_graph('Graph_Name');

这是因为搜索路径将ag_catalog作为搜索非限定对象名的第一个模式。
总的来说,在ApacheAge中使用SET search_path可以通过指定模式的顺序来搜索非限定对象名,从而帮助您编写更高效、更简洁的查询。

相关问题