Postgresql 15 - 数字文字错误后尾随垃圾

问题描述 投票:0回答:2

在 Postgresql 更新 v15 之后,我意识到即使我有一个接受 UUID 数据类型的列,每当我尝试将 UUID 数据插入表中时,它也会抛出类似的错误。

脚本:

INSERT INTO public.testing(uuid, rating) VALUES (${uuid}, ${rating});

错误:

运行查询错误错误:在“45c”或附近的数字文字后尾随垃圾

Postgresql 15 发行说明:

防止数字文字具有非数字尾随字符 (Peter Eisentraut)

这个问题有什么解决办法吗?或者有另一种数据类型允许将 UUID 存储到我的表中?

database postgresql uuid numeric query-error
2个回答
3
投票

您似乎忘记了 UUID 周围的单引号,因此 PostgreSQL 解析器对该值进行减法,并抱怨数字中混有字母。这可能会在较旧的 PostgreSQL 版本上引发不同的错误,但它也不会做正确的事情。

引用值时要小心 SQL 注入。


0
投票

我在下面遇到了同样的错误:

错误:在“1”处或附近的数字文字后面有尾随垃圾

当我使用标识符

1st_num
2nd_num
运行 SQL 时,如下所示:

SELECT 2 AS 1st_num, 3 AS 2nd_num;

所以,我将

_
设置在
1st_num
2nd_num
之前,然后错误就解决了,如下所示:

postgres=# SELECT 2 AS _1st_num, 3 AS _2nd_num;
 _1st_num | _2nd_num
----------+----------
        2 |        3
(1 row)

医生说如下:

SQL 标识符和关键字必须以字母(a-z,也可以是带变音符号的字母和非拉丁字母)或下划线 (_) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。请注意,根据 SQL 标准的字母,标识符中不允许使用美元符号,因此它们的使用可能会降低应用程序的可移植性。 SQL 标准不会定义包含数字或以下划线开头或结尾的关键字,因此这种形式的标识符可以安全地防止与标准的未来扩展可能发生的冲突。

© www.soinside.com 2019 - 2024. All rights reserved.