赞
踩
在使用CTE(公共表达式)时,没有对使用Cypher的限制。
查询:
- WITH graph_query as (
- SELECT *
- FROM cypher('graph_name', $$
- MATCH (n)
- RETURN n.name, n.age
- $$) as (name agtype, age agtype)
- )
- SELECT * FROM graph_query;
结果:
- name age
- ‘Andres’ 36
- ‘Tobias’ 25
- ‘Peter’ 35
- 3 row(s) returned
Cypher查询可以是JOIN子句的一部分。
开发者注意事项 使用CREATE、SET、REMOVE子句的Cypher查询不能在带有JOIN的SQL查询中使用,因为它们会影响Postgres事务系统。一个可能的解决方案是使用CTE来保护查询。有关更多详细信息,请参阅“使用CTE与CREATE、REMOVE和SET”子节。
查询:
- SELECT id,
- graph_query.name = t.name as names_match,
- graph_query.age = t.age as ages_match
- FROM schema_name.sql_person AS t
- JOIN cypher('graph_name', $$
- MATCH (n:Person)
- RETURN n.name, n.age, id(n)
- $$) as graph_query(name agtype, age agtype, id agtype)
- ON t.person_id = graph_query.id
结果:
- id names_match ages_match
- 1 True True
- 2 False True
- 3 True False
- 3 row(s) returned
Cypher不能在表达式中使用—查询必须存在于查询的FROM子句中。但是,如果将Cypher查询放置在子查询中,它将像任何SQL样式查询一样工作。
当编写已知返回一列和一行的cypher查询时,可以使用‘=’比较运算符。
查询:
- SELECT t.name FROM schema_name.sql_person AS t
- where t.name = (
- SELECT a
- FROM cypher('graph_name', $$
- MATCH (v)
- RETURN v.name
- $$) as (name varchar(50))
- ORDER BY name
- LIMIT 1);
结果:
- name age
- ‘Andres’ 36
- 3 row(s) returned
当编写已知返回一列但可能有多行的cypher查询时,可以使用IN运算符。
查询:
- SELECT t.name, t.age FROM schema_name.sql_person as t
- where t.name in (
- SELECT *
- FROM cypher('graph_name', $$
- MATCH (v:Person)
- RETURN v.name
- $$) as (a agtype));
结果:
- name age
- ‘Andres’ 36
- ‘Tobias’ 25
- ‘Peter’ 35
- 3 row(s) returned
当编写可能返回多个列和行的cypher查询时,可以使用EXISTS运算符。
查询:
- SELECT t.name, t.age
- FROM schema_name.sql_person as t
- WHERE EXISTS (
- SELECT *
- FROM cypher('graph_name', $$
- MATCH (v:Person)
- RETURN v.name, v.age
- $$) as (name agtype, age agtype)
- WHERE name = t.name AND age = t.age
- );
结果:
- name age
- ‘Andres’ 36
- ‘Tobias’ 25
- 3 row(s) returned
查询多个图
SQL语句可以查询多个图,没有限制。用户可以同时查询多个图。
查询:
- SELECT graph_1.name, graph_1.age, graph_2.license_number
- FROM cypher('graph_1', $$
- MATCH (v:Person)
- RETURN v.name, v.age
- $$) as graph_1(col_1 agtype, col_2 agtype, col_3 agtype)
- JOIN cypher('graph_2', $$
- MATCH (v:Doctor)
- RETURN v.name, v.license_number
- $$) as graph_2(name agtype, license_number agtype)
- ON graph_1.name = graph_2.name
结果:
- name age license_number
- ‘Andres’ 36 1234567890
- 3 row(s) returned
一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例
每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:
设置
部分数据库
连接信息
开启直连
MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。
配置白名单
通过数据库客户端连接数据库,可以执行图操作
- CREATE EXTENSION age;
- LOAD 'age';
- SET search_path = ag_catalog, "$user", public;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。