pq: функция unnest (unknown) не является уникальной - PullRequest
0 голосов
/ 06 октября 2018

Следующий код работает нормально.Но я хочу определить массив ['a', 'b', 'c', 'd', 'e'] как переменную.

rows, err :=  db.Query("select colname from (SELECT date, unnest(array['a', 'b', 'c', 'd', 'e']) AS colname, unnest(array[a, b, c, d, e]) AS thing from test1 where date='123') as tester where thing=1;")

Поэтому я пытаюсь выполнить следующий код, используя github.com/lib/pq.

arr1 := []string{"a", "b", "c", "d", "e"}      
rows, err :=  db.Query("select colname from (SELECT date, unnest($1) AS colname, unnest($1) AS thing from test1 where date='123') as tester where thing=1;", pq.Array(arr1))

Но получаю сообщение об ошибке типа "pq: функция unnest (unknown) не уникальна".Структура таблицы и пример данных -

test=# \d+ test1
                                Table "public.test1"
 Column |         Type          | Modifiers | Storage  | Stats target | Description 
--------+-----------------------+-----------+----------+--------------+-------------
 a      | character varying(10) |           | extended |              | 
 b      | character varying(10) |           | extended |              | 
 c      | character varying(10) |           | extended |              | 
 d      | character varying(10) |           | extended |              | 
 e      | character varying(10) |           | extended |              | 
 date   | character varying(10) |           | extended |              | 

test=# select * from test1 ;
 a | b | c | d | e | date 
---+---+---+---+---+------
 3 | 1 | 3 | 2 | 3 | 124
 3 | 3 | 2 | 2 | 1 | 125
 1 | 2 | 2 | 1 | 3 | 126
 1 | 2 | 3 | 2 | 3 | 127
 1 | 1 | 2 | 2 | 3 | 123
(5 rows)

В основном я хочу, чтобы имя столбца (a, b, c, d или e) имело значение '1' на любую конкретную дату.

1 Ответ

0 голосов
/ 06 октября 2018

Я предполагаю, что pq.Array дает вам массив PostgreSQL в строковой форме, поэтому вы получите что-то вроде этого:

unnest('{a,b,c,d,e}')

и PostgreSQL не уверен, как он должен это интерпретироватьСтрока, отсюда и жалоба на unnest(unknown).Вы должны иметь возможность добавить явное приведение типа, чтобы прояснить ситуацию:

unnest($1::text[])         -- PostgreSQL-specific casting syntax
unnest(cast($1 as text[])) -- Standard casting syntax

В итоге вы получите что-то вроде этого:

rows, err :=  db.Query("select colname from (SELECT date, unnest($1::text[]) AS colname, unnest($1) AS thing from test1 where date='123') as tester where thing=1;", pq.Array(arr1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...