PostgreSQL 上不存在 Doctrine 列 id

2024-01-06

我被迫使用PostgreSQL。我已经读过一些相关内容,但它仍然是新的,我不知道为什么会收到此错误:

SQLSTATE[42703]: Undefined column: 7 ERROR: column t0.id does not exist LINE 1: SELECT t0.id AS id1, t0.user AS user2, t0.email AS ma...

我检查了 id 列存在数千次(几乎是字面上的)。

我问我的朋友,他告诉我 PostgreSQL 中没有自动增量,我必须使用序列。我找到Doctrine当我设置时自动生成序列@GeneratedValue为自动(默认)。是的,这些序列就在那里。

这是我的实体:

<?php

/**
 * @ORM\Entity
 */
class User
{

    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @ORM\Column(type="string", nullable=true) */
    protected $name;

    // some more properties similar to $name

在另一个问题中(PostgreSQL 列“foo”不存在 https://stackoverflow.com/questions/10200769/postgresql-column-foo-does-not-exist)他们想看到的输出\d table。就这个:

northys=# \d user
                         Table "public.user"
  Column  |          Type          |            Modifiers            
----------+------------------------+---------------------------------
 id       | integer                | not null
 name     | character varying(255) | default NULL::character varying
 email    | character varying(255) | not null
 password | character varying(255) | not null
Indexes:
    "user_pkey" PRIMARY KEY, btree (id)
    "uniq_8d93d649e7927c74" UNIQUE, btree (email)
Referenced by:
    TABLE "child" CONSTRAINT "fk_22b3542941807e1d" FOREIGN KEY (teacher_id) REFERENCES "user"(id)
    TABLE "event" CONSTRAINT "fk_3bae0aa7a76ed395" FOREIGN KEY (user_id) REFERENCES "user"(id)

我有PostgreSQL9.4.1 并且我没有使用任何特定于数据库的插件来实现学说。您知道为什么这不起作用吗?我陷入困境并试图找出解决方案好几天了。


user 是一个保留字 http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html。这是一个别名current_user.

regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

如果你想使用user作为表名,因为它是保留字,所以您必须引用标识符, e.g.:

SELECT id FROM "user";

您的 ORM 应该引用所有标识符,或者至少是保留字。如果不这样做,就是 ORM 中的一个错误。您可以通过使用非保留字作为表名来解决 ORM 错误。

我认为这是一个有点疣psql它会自动引用您传递给反斜杠命令的标识符。所以\d user会起作用但是select * from user惯于。你应该写\d "user"。区分大小写也会出现同样的问题,其中\d MyTable有效但是SELECT * FROM MyTable行不通,你必须写SELECT * FROM "MyTable".


最好给一个HINT错误中有关此的消息。不幸的是,解析器和规划器在生成“列不存在”错误时实际上没有足够的信息来知道您最初编写了一个关键字,它看到的只是此时的函数扫描。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 上不存在 Doctrine 列 id 的相关文章

随机推荐