【问题标题】:Syntax Error at or near "CONSTRAINT" PostgreSQL“CONSTRAINT”PostgreSQL 处或附近的语法错误
【发布时间】:2016-10-30 18:48:13
【问题描述】:

我正在尝试创建一个新表并在下面的语句中不断收到syntax error at or near "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";

【问题讨论】:

    标签: postgresql constraints create-table


    【解决方案1】:

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

    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.org/docs/9.5/static/sql-createtableas.htmlcreate table as select 语法中没有 constraint 部分。
    • @RadekPostołowicz 抱歉,由于某种原因完全错过了。我搜索了CREATE TABLE AS,但由于某种原因只看到了CREATE TABLE 文档,其中显示了constraint 部分。
    • @TimBiegeleisen 谢谢,我想我可以做到这一点,但希望在CREATE TABLE AS 声明中有办法做到这一点。感谢您的帮助!
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多