Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays PostgreSQL数组错误_Arrays_Postgresql_Triggers - Fatal编程技术网

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的新手,我强烈建议您不要尝试使用多维数组之类的东西。我知道,一开始用谷歌搜索它。但它是支持项目,我现在必须使用它。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。它很好,但结果是一维数组,我需要二维数组。