SQL 语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”中的语法错误

Posted

技术标签:

【中文标题】SQL 语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”中的语法错误【英文标题】:Syntax error in SQL statement "CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP " 【发布时间】:2019-09-03 08:17:14 【问题描述】:

我正在尝试创建 h2 数据库架构。这是我的 sql

create extension if not exists uuid_ossp;

create table users
(
    user_id     uuid default uuid_generate_v4() not null,
    name        varchar(255),
    created_on  timestamp,
    modified_on timestamp
);

create table product
(
    product_id  uuid default uuid_generate_v4() not null,
    name        varchar(25),
    created_on  timestamp,
    modified_on timestamp
);

create table products_users
(
    user_id    uuid,
    product_id uuid
);

我得到一个错误

原因:org.h2.jdbc.JdbcSQLSyntaxErrorException: 语法错误 SQL语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”;预期的 "OR, FORCE, VIEW, ALIAS, SEQUENCE, USER, TRIGGER, ROLE, SCHEMA, 常量、域、类型、数据类型、聚合、链接、内存、缓存、 本地、全球、临时、临时、表、同义词、主要、唯一、哈希、 SPATIAL, INDEX"; SQL 语句:如果不存在则创建扩展 uuid_ossp [42001-199]

【问题讨论】:

你的 PostgreSQL 缺少一个包,没有它你会得到这个错误,所以我建议在运行代码之前安装它 @YCF_L 我解决了文件问题,但无助于解决 SyntaxErrorException h2 不支持。 【参考方案1】:

我通过删除create extension if not exists uuid_ossp; 并在表格中添加default random_uuid() 而不是default uuid_generate_v4() 解决了这个问题。

【讨论】:

【参考方案2】:

对我来说,当我尝试使用 CREATE EXTENSION IF NOT EXISTS “uuid-ossp”时;

就像@annswerg 尝试过的一样,它给了我以下错误,

错误:在“CREATE EXTENSION IF NOT EXISTS ”处或附近出现语法错误 第 1 行:创建扩展如果不存在“uuid-ossp”;

但是当我运行跟随时它没有任何错误,

创建扩展“uuid-ossp”;

没有如果不存在,

而我的 postgresql 版本是 PostgreSQL 10.15 (Ubuntu 10.15-0ubuntu0.18.04.1)

希望它对将来可能面临类似问题的人有所帮助。

【讨论】:

以上是关于SQL 语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL V14中更好的SQL函数

PostgreSQL V14中更好的SQL函数

SQL查询语句

sql语句加参数

sql语句时间排序 sql语句按照时间排序

带参数的sql语句!不懂