【问题标题】:Postgres: column does not exist [duplicate]Postgres:列不存在[重复]
【发布时间】:2020-10-24 19:31:33
【问题描述】:

我一直在尝试将我的数据库从 MySql 迁移到 Postgres,但我遇到了一个似乎无法解决的大问题。

我在名为“users”的表中插入了一行,该表包含诸如 UserID、Username 等列,如下所示:

现在,在我的 C# 代码中,我正在访问数据库并获取数据,我将此查询发送到数据库:

SELECT * FROM users WHERE 'Username'='Eevee';

我试过了,但这只会导致我没有从该查询中得到任何行,如下所示:

我尝试在列名周围不带引号的情况下查询它,但这只会导致我得到

ERROR:  column "username" does not exist
LINE 1: SELECT * FROM users WHERE Username='Eevee'
                                  ^
HINT:  Perhaps you meant to reference the column "users.Username".

我的一个朋友暗示会发生这种情况,因为 Postgres 将引号之外的所有内容都设为小写,但随后我们又回到了另一个问题。

我是 Postgres 的新手,我正在努力学习这一点,但这是一堵我似乎无法修复的硬墙。

提前致谢!

【问题讨论】:

    标签: postgresql quoted-identifier


    【解决方案1】:

    最好不要使用大小写混合的列或表。如果你碰巧有,你应该用双引号 " 将标识符名称括起来,而不是用单引号括起来,这意味着字符串文字:

    SELECT * FROM users WHERE "Username" = 'Eevee'
    

    附:在第一种情况下,您只是比较了两个字符串,'Username''Eevee',它们自然不相似。因此,您得到了 0 行响应。

    【讨论】:

    • 天哪,我觉得自己好蠢,哈哈。这很好用,谢谢你救了我!
    • @ArkadiuszBrzoza 没有必要感到愚蠢,你是新手。如果系统尚未运行,那么我建议您将所有表和列重命名为小写。为清楚起见,您可以用下划线分隔单词。
    猜你喜欢
    • 2021-11-16
    • 2013-10-28
    • 2014-11-07
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2017-10-19
    相关资源
    最近更新 更多