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

如何将SQL Server的PRICE表迁移至PostgreSQL并正确创建衍生列?

解决SQL Server PRICE表迁移至PostgreSQL及衍生列创建问题

一、正确迁移SQL Server表结构到PostgreSQL

SQL Server中的列名包含特殊字符(括号),PostgreSQL支持这类列名但需用双引号包裹,不过更推荐使用无特殊字符的规范列名,避免后续操作繁琐。

1. 保留原列名的建表语句

CREATE TABLE PRICE (
    ISIN varchar(50) NOT NULL,
    Nemo varchar(50) NOT NULL,
    "Month(t)" int NOT NULL,
    "Month(t-1)" int NOT NULL,
    "Month(t-2)" int NOT NULL
);

注意:操作这类带特殊字符的列时,必须用双引号包裹列名,例如SELECT "Month(t)" FROM PRICE;。

2. 使用规范列名的建表语句(推荐)

CREATE TABLE PRICE (
    isin varchar(50) NOT NULL,
    nemo varchar(50) NOT NULL,
    month_t int NOT NULL,
    month_t_minus_1 int NOT NULL,
    month_t_minus_2 int NOT NULL
);

该命名方式符合PostgreSQL习惯,无需额外引号,更易维护。

二、正确创建衍生列

你之前的报错核心是重复使用Month作为列名,每个列必须有唯一名称。另外,衍生列依赖已有列计算,需先定义基础列,再生成衍生列。

假设以month_t为基础列,自动生成month_t_minus_1(month_t - 1)和month_t_minus_2(month_t - 2),正确建表语句如下:

CREATE TABLE PRICE (
    isin varchar(50) NOT NULL,
    nemo varchar(50) NOT NULL,
    month_t int NOT NULL,
    month_t_minus_1 int GENERATED ALWAYS AS (month_t - 1) STORED,
    month_t_minus_2 int GENERATED ALWAYS AS (month_t - 2) STORED
);
  • GENERATED ALWAYS AS (...) STORED表示衍生列的值会自动计算并存储,无需手动插入或更新。
  • 衍生列的列名必须唯一,且计算逻辑依赖已提前定义的列(此处为month_t)。

若业务逻辑有其他依赖关系,只需调整衍生列的计算表达式即可,确保列名唯一、表达式中的列已定义。

三、数据迁移建议

表结构创建完成后,可通过以下方式迁移数据:

  • 用工具将SQL Server数据导出为CSV,再用PostgreSQL的COPY命令导入:
    COPY PRICE (isin, nemo, month_t, month_t_minus_1, month_t_minus_2)
    FROM '/path/to/price_data.csv'
    DELIMITER ','
    CSV HEADER;
    
  • 若使用衍生列,只需导入基础列(如isin、nemo、month_t),衍生列的值会自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:35:28