Я изо всех сил вставив запись в PostgreSQL:Я изо всех сил получить обратно идентификатор из PostgreSQL в Play
val res = DB.withConnection {
implicit con =>
SQL(
"""INSERT INTO
my_table(id, user_id, file_name, added_at)
VALUES(DEFAULT, {userId}, {fileName}, {currentTime})
RETURNING id
""")
.on("userId" -> 1, "fileName" -> "fileName1", "currentTime" -> new java.sql.Timestamp(DateTime.now.getMillis))
.executeInsert()
}
Ok(toJson(JsObject(Seq("res" -> JsString(res.toString)))))
Это делает вставить значение (которое можно увидеть через pdAdmin), но она возвращает ошибку в конечном итоге ERROR: syntax error at or near "RETURNING"
.
Если удалить RETURNING id
то ошибка становится TypeDoesNotMatch(Cannot convert requestBody4050249427671619471asTemporaryFile :class java.lang.String to Long for column ColumnName(my_table.file_name,Some(file_name)))]]
Когда я отрезал id
и DEFAULT
ошибка остается прежней.
my_table
определено в
CREATE TABLE my_table
(
file_name character(255),
user_id integer,
added_at timestamp without time zone,
id serial NOT NULL,
CONSTRAINT my_table_pk PRIMARY KEY (id),
CONSTRAINT scan_fk FOREIGN .....
)
Почему? Что это имеет отношение к file_name
в любом случае?
Обычно, если вы используете 'RETURNING', вам нужно выдать его больше как запрос' SELECT'; например в обычной Java вы должны использовать 'execute' not' executeUpdate', чтобы он получал ResultSet. Я подозреваю, что здесь происходит, что PgJDBC или Play добавляет к вам свое предложение 'RETURNING' для вас неявно. Проверьте журнал ошибок сервера * для получения подробностей - есть ли в вашем запросе два предложения «ВОЗВРАТ»? –
где «журнал ошибок сервера»? –
Сервер PostgreSQL создает журнал. Google расскажет вам об этом. По умолчанию, когда любой клиент запускает оператор, который вызывает ошибку, сервер регистрирует сообщение об ошибке. Просмотрите этот журнал ошибок, и вы увидите сообщение об ошибке и заявление, которое вызвало ошибку, что может быть очень информативным. –