Nor*_*hys 3 sql database postgresql doctrine
我被迫使用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没有自动增量,我必须使用序列.我发现当我设置为auto(默认值)时,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
Run Code Online (Sandbox Code Playgroud)
在其他问题(PostgreSQL专栏'foo'不存在)中,他们希望看到输出\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)
Run Code Online (Sandbox Code Playgroud)
我正在使用PostgreSQL 9.4.1而且我没有使用任何数据库特定的插件来进行学说.你有什么想法,为什么这不起作用?我陷入困境,并试图找出解决方案好几天.
Cra*_*ger 10
user 是一个保留字.它是别名current_user.
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Run Code Online (Sandbox Code Playgroud)
如果要user用作表名,因为它是保留字,您必须引用标识符,例如:
SELECT id FROM "user";
Run Code Online (Sandbox Code Playgroud)
您的ORM应引用所有标识符,或至少保留字.不这样做是您的ORM中的错误.您可以使用非保留字作为表名来解决ORM错误.
我认为这有点蠢psql,它会自动引用你传递给反斜杠命令的标识符.所以\d user会工作,但select * from user不会.你应该写\d "user".同样的问题出现在区分大小写的情况下\d MyTable工作但SELECT * FROM MyTable不起作用,你必须写SELECT * FROM "MyTable".
HINT在错误中给出关于此的消息是很好的.不幸的是,解析器和规划器在"列不存在"时没有足够的信息生成错误,以便知道您最初编写了一个关键字,它所看到的只是一个函数扫描.