【问题标题】:PostgreSQL can't insert data into table (column does not exist) [duplicate]PostgreSQL无法将数据插入表(列不存在)[重复]
【发布时间】:2021-09-24 20:06:26
【问题描述】:

PostgreSQL 13,pgAdmin 4。

我有一个包含以下列的“学生”表:

  • student_id(文本,主键)
  • 姓氏(文本)
  • 名字(文本)
  • 专业(文字)
  • credit_hours (int)

我只是想在这个表中添加另一个学生,我正在尝试使用下面的查询来完成

INSERT INTO Public."Student" ("student_id", "last_name", "first_name", "major", "credit_hours")
VALUES ("S201217","BAR","FOO","CSC",100);

但是当我运行这个查询时,我得到了这个输出

ERROR:  column "S201217" does not exist
LINE 2: VALUES ("S201217","BAR","FOO","CSC",100);
                ^
SQL state: 42703
Character: 105

这么基本的错误,我这里肯定是漏了什么,为什么这个查询不能加一行?

【问题讨论】:

    标签: sql postgresql sql-insert string-constant


    【解决方案1】:

    双引号用于引用列。使用单引号而不是双引号。

    INSERT INTO Public."Student" ("student_id", "last_name", "first_name", "major", "credit_hours")
    VALUES ('S201217','BAR','FOO','CSC',100);
    

    【讨论】:

    • 这解决了问题 lmao,谢谢
    • 不仅“在 PostgreSQL 中”,这也是 SQL 标准所要求的。
    • @tanman,如果它回答了您的问题,请考虑accepting它。
    【解决方案2】:

    DB 引擎认为这个"S201217" 是列名,加单引号就可以了

    INSERT INTO Public."Student" (student_id, last_name, first_name, major, credit_hours)
    VALUES ('S201217','BAR','FOO','CSC',100);
    

    如果你用它来命名这样的字符串,例如你的表,你需要“”,因为它以大写 S 开头,它应该用双引号引起来,对于列名不需要它。或者例如,如果做选择

    Select now() as 'Time now'
    

    因为别名有空字符串和大写字母你需要包含在“”中

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多