Тип ltree postgres с использованием данных пружины jpa - получение синтаксической ошибки после определения функции и приведение в postgres - PullRequest
0 голосов
/ 21 марта 2020

При попытке написать сущность, содержащую значение типа ltree, я получил следующую ошибку:

column "path" is of type ltree but expression is of type character varying

Погуглив эту ошибку, я получил Macaddr / Inet тип postgres in slick

Ответ от Крейга Рингера заставил меня пойти дальше, хотя создание приведенного текста -> Это дерево не сработало, поэтому я создал приведенный вариант -> Это дерево следующим образом

CREATE OR REPLACE FUNCTION ltree_invarchar(varchar) RETURNS ltree AS $$
SELECT ltree_in($1::cstring);
$$ LANGUAGE SQL IMMUTABLE;
CREATE CAST (varchar AS ltree) WITH FUNCTION ltree_invarchar(varchar) AS IMPLICIT;

Это помогло мне преодолеть первоначальную ошибку, но теперь, когда я пытаюсь вставить значение ltree из Java с помощью Spring Boot Starter Data JPA, я получаю длинную трассировку стека, которая заканчивается примерно так:

Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at position 0
  Where: SQL function "ltree_invarchar" statement 1
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2155)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288)
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)
    at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:135)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
    at com.sun.proxy.$Proxy120.executeUpdate(Unknown Source)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
    ... 71 more

Я новичок в postgres, поэтому я создал вышеописанную функцию, изменив те, которые приведены в найденных ответах, но теперь я застрял. Мне нужна помощь, чтобы определить, что такое синтаксическая ошибка и как ее исправить.

1 Ответ

0 голосов
/ 23 марта 2020

Я обнаружил, что сообщение об ошибке синтаксиса не говорит мне, что есть проблема с моим SQL или функцией; это говорит мне, что есть проблема с данными, отправляемыми в функцию. В моем случае была ошибка в моем Java коде, который отправлял путь, начинающийся с «.», Что недопустимо. Исправление этой ошибки в коде Java решило мою проблему.

...