错误:关系列不存在PostgreSQL,无法运行插入查询

Jis*_*hap 9 sql postgresql quoted-identifier sql-insert

嗨我试图插入表tester3它使用语法失败

insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)

insert into tester3 values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)

工作正常.

mydb=# CREATE TABLE tester3
mydb-#    (
mydb(#     "UN0" integer,
mydb(#     "UN1" VARCHAR(40)
mydb(#    );
CREATE TABLE
mydb=# insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
ERROR:  column "un0" of relation "tester3" does not exist
mydb=# \d tester3
           Table "public.tester3"
 Column |         Type          | Modifiers
--------+-----------------------+-----------
 UN0    | integer               |
 UN1    | character varying(40) |
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些非常微不足道的东西,我尝试了其他一些列名称,其中一些工作正常,一些不起作用.我很迷惑.PostgreSQL对列名的限制是否适用于插入查询的第一种语法?


编辑: 正如Gordon Linoff 所建议的那样使用双引号解决了这个问题.

insert into tester3 ("UN0", "UN1") values ( 1, 'jishnu1');工作良好

正如弗兰克海肯斯指出的那样,其他列名称在没有引号的情况下工作,其中小写.

小写列是PostgreSQL中的标准,也可以不带引号

Gor*_*off 13

如果使用双引号定义列,则在引用该列时需要使用它们:

insert into tester3 ("UN0", "UN1")
     values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)

我建议你从CREATE TABLE语句中的列名中删除双引号.

  • @JishnuPrathap:这都是小写的,这是PostgreSQL中的标准,也可以不用引号. (4认同)
  • @jishnuPrathap你明确地将这些列创建为大写,但后来以不区分大小写的方式查询它们,因此找不到它们.将名称放在引号中时,查找将区分大小写. (3认同)
  • 很奇怪,表格的描述没有显示双引号.但是,是的,这似乎是正确的答案. (2认同)

Ame*_*nde 6

尝试使用双引号对您的列名称进行此操作

insert into tester3 ("UN0", "UN1") values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)