我正在计算具有节点n1, n2, ...
和边沿(n_i, n_j)
的图形。我想将其存储在两个postgresql表中。第一个称为nodes
,并具有由node_id SERIAL
列定义的节点ID列。秒称为edges
,并具有列start_node_id
和end_node_id
,它们是节点表和节点ID列的引用。
当我插入节点时,我不知道它们的节点ID。因此,要插入相应的边,我需要查询在插入节点时创建的节点ID。是否有“更巧妙的方式”实现这一目标?在这种情况下,您的最佳做法是什么?
答案 0 :(得分:1)
如果要按名称引用节点,可以通过查找edges
来插入id
:
insert into edges (start_node_id, end_node_id)
select ns.node_id, ne.node_id
from (values ('n1', 'n2')) e(start_node_name, end_node_name) join
nodes ns
on ns.node_name = e.start_node_name join
nodes ne
on ne.node_name = e.end_node_name ;
答案 1 :(得分:1)
您可以使用RETURNING来访问刚刚插入的数据。
在另一个问题中,您报告您正在使用Python; this question显示了如何访问RETURNING值。