postgresql - "CONSTRAINT"处或附近的语法错误 PostgreSQL

标签 postgresql constraints create-table

我正在尝试创建一个新表,但在下面的语句中“CONSTRAINT”处或附近不断出现语法错误。我已经确保在声明的最后一列之后有一个 ,,即 CONSTRAINT 行正上方的 Tags。有谁知道为什么会发生这种情况?所有声明约束的在线示例似乎都涉及 CREATE TABLE 语句,而不是 CREATE TABLE AS 语句。这有关系吗?感谢您的帮助!

顺便说一句,下面的约束行是从我已经创建的表中复制/粘贴的,该表使用 CREATE TABLE 语句,而不是 CREATE TABLE AS 语句,这就是为什么我询问约束是否不适用于 CREATE TABLE AS 语句。

CREATE TABLE "2017Projects" AS
SELECT
    "STAGING_PROJECTS"."_PROJECT_NUMBER", 
    "STAGING_PROJECTS"."_PROJECT_DESCRIPTION",
    "STAGING_PROJECTS"."_PROJECT_STATUS",
    "STAGING_PROJECTS"."_TEMPLATE_FLAG",
    "STAGING_PROJECTS"."_PROJECT_START_DATE",
    "STAGING_PROJECTS"."_PROJECT_COMPLETION_DATE",
    "STAGING_PROJECTS"."_COMPANY",
    "STAGING_PROJECTS"."_LOCATION_NUMBER",
    "STAGING_TASKS"."_PARENT_TASK_NUMBER",
    "STAGING_TASKS"."_PARENT_TASK_DESCRIPTION",
    "STAGING_TASKS"."_TASK_NUMBER",
    "STAGING_TASKS"."_TASK_DESCRIPTION",
    "STAGING_TASKS"."_TASK_START_DATE",
    "STAGING_TASKS"."_TASK_COMPLETION_DATE",
    "STAGING_TASKS"."_EBS_ACCOUNT",
    "STAGING_TASKS"."_FUSION_ACCOUNT",
    CASE
        WHEN left("STAGING_PROJECTS"."_PROJECT_NUMBER",2) = 'C0' THEN 
            '('||"STAGING_PROJECTS"."_PROJECT_NUMBER"||') '||"STAGING_PROJECTS"."_PROJECT_DESCRIPTION"
        ELSE
            "STAGING_PROJECTS"."_PROJECT_DESCRIPTION"
    END AS "Project",
    '('||"STAGING_TASKS"."_TASK_NUMBER"||') '||"STAGING_TASKS"."_TASK_DESCRIPTION" AS "Task",
    NULL AS "Investment_Priority",
    NULL AS "Class",
    NULL AS "Tags",

    --ERROR ON NEXT LINE HERE!!!
    CONSTRAINT "2017Projects_pk" PRIMARY KEY ("_PROJECT_NUMBER", "_TASK_NUMBER")
FROM
    "STAGING_PROJECTS";

最佳答案

您需要使用第二条语句添加约束:

CREATE TABLE "2017Projects" AS
SELECT
    "STAGING_PROJECTS"."_PROJECT_NUMBER", 
    ...,
    NULL AS "Tags"
FROM
    "STAGING_PROJECTS";

ALTER TABLE "2017Projects" ADD CONSTRAINT "2017Projects_pk"
    PRIMARY KEY ("_PROJECT_NUMBER", "_TASK_NUMBER")

CREATE TABLEALTER TABLE 语句应在单个事务中运行。

请查看this great Stack DBA article ,@a_horse_with_no_name 作为贡献者。

关于postgresql - "CONSTRAINT"处或附近的语法错误 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38076252/

相关文章:

python - Django:查询集对象过滤器,针对另一个对象的时间范围

templates - 如何在 C++/CLI 中使用模板化的通用约束

postgresql - PostgreSQL 中奇怪的 ORDER BY 顺序

sql - 使用正则表达式搜索 Postgresql 数据库

sql - 从 Hibernate 查询中的时间戳中提取时间

ios - 将 UIImageView 与约束一起使用

ios - 具有多个动态高度的 TableView 的 Xcode 自动布局垂直约束

hive - 如何使用 Hive 创建具有单个 hdfs 路径的 n 个外部表

sql - 我无法在PostgreSQL上创建表

postgresql - Postgres CREATE TABLE AS SELECT 列类型未知