在PostgreSQL中向数组插入值

在PostgreSQL中向数组插入值,sql,arrays,postgresql,common-table-expression,recursive-query,Sql,Arrays,Postgresql,Common Table Expression,Recursive Query,我试图将值插入整数数组,用作显示特定节点的所有祖先的路径 这些值(parent\u link integer)来自ID为且parent\u link的表。我尝试遍历树状结构,将所有父链接组合到一个路径中,插入到属于该特定ID的整数数组中。我尝试对数据库中的每个记录执行此操作。到目前为止,我已经: INSERT INTO master_ifis_network (path) SELECT t2.parent_link FROM master_ifis_network as t2 WHERE t2.

我试图将值插入整数数组,用作显示特定节点的所有祖先的路径

这些值(
parent\u link integer
)来自ID为且
parent\u link
的表。我尝试遍历树状结构,将所有
父链接
组合到一个路径中,插入到属于该特定ID的整数数组中。我尝试对数据库中的每个记录执行此操作。到目前为止,我已经:

INSERT INTO master_ifis_network (path)
SELECT t2.parent_link
FROM master_ifis_network as t2
WHERE t2.parent_link = (SELECT t1.parent_link
     FROM master_ifis_network as t1)
AND t2.link_id = (parent_link)
我收到一个错误,说明我无法在需要
整数[]
的位置插入
整数。
我也尝试过这个方法,它输出一个父节点列表:

SELECT parentX.parent_link FROM [table name] as nodeX, [table name] as parentx
WHERE nodeX.left BETWEEN parentX.left AND parentX.right)
AND nodeX.link_id = [some id] 
ORDER BY parentX.left DESC

有什么提示或想法吗?

以下是我的结论:

UPDATE master_ifis_network SET path = array(SELECT parentX.parent_link 
FROM master_ifis_network AS parentX 
WHERE (nodeX.left BETWEEN parentX.left AND parentX.right) AND nodeX.link_id = [some id] 
ORDER BY parentX.left DESC) 
WHERE link_id = [same id];"

使用递归CTE,即:
和递归

您需要的是
更新
,而不是
插入

WITH RECURSIVE cte AS (
   SELECT link_id, ARRAY[parent_link] AS path, 1 AS level
   FROM   master_ifis_network

   UNION  ALL
   SELECT c.link_id, m.parent_link || c.path, c.level + 1
   FROM   cte c
   JOIN   master_ifis_network m ON m.link_id = c.path[1]
   )
UPDATE master_ifis_network m
SET    path = sub.path
FROM  (
   SELECT DISTINCT ON (link_id) *
   FROM   cte
   ORDER  BY link_id, level DESC
  ) sub
WHERE m.link_id = sub.link_id;
有关答案:


这里还有很多其他人。用上面的关键字搜索。

我不知道SQL Server希望如何在字段中插入“integer[]”值。我错过什么了吗?我想输入所有数据的列是一个整数[]您使用的是什么数据库引擎?确切的错误消息和主ifis_网络
模式是什么?像这样的问题需要一个表定义(在
psql
中使用
\d tbl
)和Postgres的确切版本。感谢您的反馈。