如何将此表从SQL Server传递到Postgress?

fnatzsnv  于 2023-01-16  发布在  SQL Server
关注(0)|答案(2)|浏览(121)

有人知道我如何在Postgres中生成一个列吗?
下面是SQL Server中的代码:

CREATE TABLE [dbo].[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
)

我在网上搜索了一下,发现在Postgres中做这件事的方法是使用GENERATE ALWAYS AS,但是我得到了一个错误,因为月份列重复了好几次,这是做减法时应该区分的问题。

CREATE TABLE PRICE
(
    ISIN varchar(50) NOT NULL,
    Nemo varchar(50) NOT NULL,
    Month int GENERATED ALWAYS AS (t) STORED,
    Month int GENERATED ALWAYS AS (t-1) STORED,
    Month int GENERATED ALWAYS AS (t-2) STORED,
)
4si2a6ki

4si2a6ki1#

postgres有不同的语法,您可以通过名称引用列并创建新列。
Reference

CREATE TABLE PRICE(
    ISIN varchar(50) NOT NULL,
    Nemo varchar(50) NOT NULL,
    Month int,
    Month_1 int GENERATED ALWAYS AS (Month-1) STORED,
    Month_2 int GENERATED ALWAYS AS (Month-2) STORED
);

测试

insert into PRICE values('aaa','bbb',20)
select * from price;

| 伊辛|尼莫|月|第1个月|第2个月|
| - ------|- ------|- ------|- ------|- ------|
| 美国汽车协会|bbb|二十个|十九|十八|
View on DB Fiddle

lf3rwulv

lf3rwulv2#

这些不是生成的列,它们只是有非标准的名称,需要用引号括起来。在SQL Server中,这样的列需要用方括号括起来。Postgres遵循SQL标准,这样的名称需要用双引号括起来:

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
)

Example with SQL Server
Example with PostgreSQL

相关问题