PostgreSQL手动插入UUID值的语法问题及正确写法
问题分析与解决方案
你碰到的这个语法错误其实很常见——你手动输入的UUID没有用单引号包裹。PostgreSQL看到没加引号的292a485f-a56a-4938-8f1a-bbbbbbbbbbb1时,会把它解析成一连串的减法操作(比如292a485f减a56a再减4938...),这显然不符合SQL语法,所以才会抛出syntax error。
正确的手动插入语法
只需要给UUID字符串加上单引号,把它当作字符串常量传入即可:
INSERT INTO DIM_Jour (jour_id, AAAA, MM, JJ, Jour_Semaine, Num_Semaine) VALUES ('292a485f-a56a-4938-8f1a-bbbbbbbbbbb1', 2020, 11, 19, 4, 47);
更规范的UUID生成方式
既然你提到最终要使用UUID生成器,推荐直接用PostgreSQL内置的uuid_generate_v4()函数自动生成UUID,这样既避免手动输入的格式错误,也更符合生产环境的做法:
1. 先启用uuid-ossp扩展(如果没启用过)
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
2. 使用函数生成UUID插入
INSERT INTO DIM_Jour (jour_id, AAAA, MM, JJ, Jour_Semaine, Num_Semaine) VALUES (uuid_generate_v4(), 2020, 11, 19, 4, 47);
这样就不会再出现语法错误啦。
内容的提问来源于stack exchange,提问作者Jonath P




