2017-02-02 6 views
1

Функции array_append, чтобы добавить элемент в массив в Postgres имеет подпись, как показано нижеТипа литая исключение при попытке выполнить array_append функции в Postgres

Schema |  Name  | Result data type | Argument data types | Type | Security | Volatility | Owner | Language | Source code |   Description    
------------+--------------+------------------+----------------------+--------+----------+------------+----------+----------+--------------+---------------------------------- 
pg_catalog | array_append | anyarray   | anyarray, anyelement | normal | invoker | immutable | rdsadmin | internal | array_append | append element onto end of array 

Когда я исполнить его, как показано ниже с подготовленным заявлением в удалить элемент массива, как показано ниже,

StringBuilder builder = new StringBuilder(); 
builder.append("update test set tags = array_append(tags, ?) where id = ?") 
pstmt = cursor.prepareStatement(builder.toString()); 
int queryCount = 0; 
pstmt.setString(++queryCount, "2181"); 
pstmt.setString(++queryCount, "123"); 

я получаю следующее исключение

org.postgresql.util.PSQLException: ERROR: function array_remove(text[], character varying) does not exist 
    Hint: No function matches the given name and argument types. You might need to add explicit type casts. 
    Position: 60 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2284) 
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2003) 
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200) 
     at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424) 
     at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161) 
     at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:133) 

Ниже приводится схема для таблицы «Test»

Column  |   Type   | Modifiers | Storage | Stats target | Description 
---------------+--------------------------+---------------+----------+--------------+------------- 
id   | text      | not null  | extended |    | 
tags | text[]     | not null  | extended |    | 

Может кто-то дайте мне знать, как это исправить? Однако это работает при использовании без PreparedStatement

+0

Не могли бы вы показать нам «array_append» код? –

+0

Встроенная функция array_append Postgres не соответствует вашим требованиям? https://www.postgresql.org/docs/9.1/static/functions-array.html –

+0

@ P.Merkle Это встроенная функция, я думаю –

ответ

1

Try бросить первый параметр в text, как это определено в вашей схеме:

UPDATE test SET tags = array_append(tags, ?::text) WHERE id = ?