You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在psql中执行建表SQL脚本时遭遇IDENTITY与NONCLUSTERED语法错误

问题分析与解决方案

你的脚本是SQL Server专属语法,但你用的是PostgreSQL的psql工具执行,两者语法不兼容,所以才会报错。下面是具体问题和修正后的脚本:

错误点解析

  • IDENTITY(1,1):这是SQL Server的自增列写法,PostgreSQL里有两种替代方式:
    • PostgreSQL 10及以上版本:用GENERATED AS IDENTITY
    • 旧版本:用SERIAL(本质是自动创建序列+绑定默认值)
  • NONCLUSTERED INDEX:SQL Server的非聚集索引关键字,PostgreSQL里没有这个概念,默认创建的B-tree索引就是非聚集的,直接写CREATE INDEX即可
  • dbo schema:PostgreSQL默认没有dbo这个schema,要么提前创建它,要么改用默认的public schema

修正后的PostgreSQL兼容脚本

方式1(PostgreSQL 10+推荐)

-- 可选:如果没有dbo schema先创建,也可以直接改用public
CREATE SCHEMA IF NOT EXISTS dbo;

CREATE TABLE dbo.mytable (
    id int NOT NULL GENERATED ALWAYS AS IDENTITY,
    userID int NULL,
    Probability DECIMAL(18,8) NULL,
    Conv_Thresh1 int NULL,
    Conv_Thresh2 int NULL,
    DateAddedToDB date NULL
);

ALTER TABLE dbo.mytable ADD CONSTRAINT pk_mytable_id PRIMARY KEY (id);

CREATE INDEX i1 ON dbo.mytable (userID);

方式2(兼容PostgreSQL旧版本)

CREATE SCHEMA IF NOT EXISTS dbo;

CREATE TABLE dbo.mytable (
    id SERIAL NOT NULL,
    userID int NULL,
    Probability DECIMAL(18,8) NULL,
    Conv_Thresh1 int NULL,
    Conv_Thresh2 int NULL,
    DateAddedToDB date NULL
);

ALTER TABLE dbo.mytable ADD CONSTRAINT pk_mytable_id PRIMARY KEY (id);

CREATE INDEX i1 ON dbo.mytable (userID);

额外说明

  • 你用\i c:/Users/.../sql_script.sql执行脚本的方式是正确的,问题出在脚本本身的语法适配性
  • 如果不需要dbo schema,把所有dbo.替换成public.或者直接去掉即可

内容的提问来源于stack exchange,提问作者blaughli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:17:11