Arrays PostgreSQL数组错误
我是新来的Arrays PostgreSQL数组错误,arrays,postgresql,triggers,Arrays,Postgresql,Triggers,我是新来的PostgreSQL,我创建了2个表 CREATE TABLE HOUR( id integer, hour timestamp ) ; CREATE TABLE ACTIVITY_TIME( id integer, day_hours varchar[][] ) ; day\u hours列是周数和hours表id组合的数组。该列的值类似于{1,5}、{2,5}、{2,6}。我尝试创建一个触发器,当我从HOURS表中删除HOURS时,在ACTIVITY\u TIME中,我必须在存
PostgreSQL
,我创建了2个表
CREATE TABLE HOUR(
id integer,
hour timestamp ) ;
CREATE TABLE ACTIVITY_TIME(
id integer,
day_hours varchar[][] ) ;
day\u hours
列是周数和hours
表id组合的数组。该列的值类似于{1,5}、{2,5}、{2,6}
。我尝试创建一个触发器,当我从HOURS
表中删除HOURS
时,在ACTIVITY\u TIME
中,我必须在存在该小时的日小时内删除该触发器。例如,如果我从HOUR
中删除id=6
,那么day\u hours
的结果将是{1,5}、{2,5}
,或者如果day\u hours
{code>{3,2}、{3,4}、{4,2}
,如果我从HOUR
中删除day\u hours的结果将是{3,4}。我知道如何写入触发器,但我不能编写执行数组的过程
WITH summary AS (
SELECT
"unnest" (
"DAY_HOURS" [ 1 : array_length("DAY_HOURS",1)][ 1 : 1 ]:: INT []
) AS days,
"unnest" (
"DAY_HOURS" [ 1 : array_length("DAY_HOURS",1)][ 2 : 2 ]:: INT []
) AS hours
FROM
"ACTIVITY_TIME"
WHERE
"ID" = 3
)
SELECT ARRAY(SELECT ARRAY[ s.days,s.hours] FROM
summary s WHERE s.hours!= 2 )
这给错误:找不到数据类型integer[]的数组类型错误,问题是函数array()
(我指的是函数array()
,而不是构造函数array[]
)不接受数组作为参数。此查询:
SELECT array(select array[1,2]);
给你一个错误:
ERROR: could not find array type for data type integer[]
函数array()
接受一个set作为参数。使用函数unest
转换集合中的数组:
SELECT array(select unnest(array[1,2]));
-- Result:
-- array
-- -------
-- {1,2}
但是,这将取消一维数组中二维数组的所有元素的测试。作为解决方法,您可以首先将数组转换为文本,构建文本数组,再次转换为文本,删除引号,最后将文本结果转换为二维数组:
您的查询如下所示:
WITH summary AS (
SELECT
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 1 : 1 ]:: INT []
) AS days,
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 2 : 2 ]:: INT []
) AS hours
FROM
ACTIVITY_TIME
WHERE
ID = 3
)
select replace(array(SELECT ARRAY[ s.days,s.hours]::text FROM -- <<< change this line
summary s WHERE s.hours!= 2 )::text, '"','')::int[][] AS array; -- <<< change this line
问题是函数array()
(我指的是函数array()
,而不是构造函数array[]
)不接受数组作为参数。此查询:
SELECT array(select array[1,2]);
给你一个错误:
ERROR: could not find array type for data type integer[]
函数array()
接受一个set作为参数。使用函数unest
转换集合中的数组:
SELECT array(select unnest(array[1,2]));
-- Result:
-- array
-- -------
-- {1,2}
但是,这将取消一维数组中二维数组的所有元素的测试。作为解决方法,您可以首先将数组转换为文本,构建文本数组,再次转换为文本,删除引号,最后将文本结果转换为二维数组:
您的查询如下所示:
WITH summary AS (
SELECT
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 1 : 1 ]:: INT []
) AS days,
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 2 : 2 ]:: INT []
) AS hours
FROM
ACTIVITY_TIME
WHERE
ID = 3
)
select replace(array(SELECT ARRAY[ s.days,s.hours]::text FROM -- <<< change this line
summary s WHERE s.hours!= 2 )::text, '"','')::int[][] AS array; -- <<< change this line
问题是函数array()
(我指的是函数array()
,而不是构造函数array[]
)不接受数组作为参数。此查询:
SELECT array(select array[1,2]);
给你一个错误:
ERROR: could not find array type for data type integer[]
函数array()
接受一个set作为参数。使用函数unest
转换集合中的数组:
SELECT array(select unnest(array[1,2]));
-- Result:
-- array
-- -------
-- {1,2}
但是,这将取消一维数组中二维数组的所有元素的测试。作为解决方法,您可以首先将数组转换为文本,构建文本数组,再次转换为文本,删除引号,最后将文本结果转换为二维数组:
您的查询如下所示:
WITH summary AS (
SELECT
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 1 : 1 ]:: INT []
) AS days,
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 2 : 2 ]:: INT []
) AS hours
FROM
ACTIVITY_TIME
WHERE
ID = 3
)
select replace(array(SELECT ARRAY[ s.days,s.hours]::text FROM -- <<< change this line
summary s WHERE s.hours!= 2 )::text, '"','')::int[][] AS array; -- <<< change this line
问题是函数array()
(我指的是函数array()
,而不是构造函数array[]
)不接受数组作为参数。此查询:
SELECT array(select array[1,2]);
给你一个错误:
ERROR: could not find array type for data type integer[]
函数array()
接受一个set作为参数。使用函数unest
转换集合中的数组:
SELECT array(select unnest(array[1,2]));
-- Result:
-- array
-- -------
-- {1,2}
但是,这将取消一维数组中二维数组的所有元素的测试。作为解决方法,您可以首先将数组转换为文本,构建文本数组,再次转换为文本,删除引号,最后将文本结果转换为二维数组:
您的查询如下所示:
WITH summary AS (
SELECT
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 1 : 1 ]:: INT []
) AS days,
unnest (
DAY_HOURS [ 1 : array_length(DAY_HOURS,1)][ 2 : 2 ]:: INT []
) AS hours
FROM
ACTIVITY_TIME
WHERE
ID = 3
)
select replace(array(SELECT ARRAY[ s.days,s.hours]::text FROM -- <<< change this line
summary s WHERE s.hours!= 2 )::text, '"','')::int[][] AS array; -- <<< change this line
如果你是PostgreSQL的新手,我强烈建议你不要尝试使用多维数组之类的东西。但它是支持项目的,我现在必须使用它。如果您是PostgreSQL的新手,我强烈建议您不要尝试使用多维数组之类的东西。我知道,一开始用谷歌搜索它。但它是支持项目的,我现在必须使用它。如果您是PostgreSQL的新手,我强烈建议您不要尝试使用多维数组之类的东西。我知道,一开始用谷歌搜索它。但它是支持项目的,我现在必须使用它。如果您是PostgreSQL的新手,我强烈建议您不要尝试使用多维数组之类的东西。我知道,一开始用谷歌搜索它。但它是支持项目,我现在必须使用它。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。