2017-08-02 46 views
2

我在看PostgreSQL documentation,我看到Postgres没有一个datatime数据类型,但是当我运行./manage.py sqlmigrate myapp 0001_initialDjango实际上产生一个datetime场:Django的DATATIME场

CREATE TABLE "myapp_event" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "start" datetime NOT NULL); 

所以我有点糊涂了。是datetime假设是timestamp

更新: 我没有意识到我在SQLite数据库中使用了不同的设置文件。希望这个错误对其他人有用。

在PostgreSQL它看起来像这样:

CREATE TABLE "myapp_event" ("id" serial NOT NULL PRIMARY KEY, "start" timestamp with time zone NOT NULL); 

所以datetime在SQLite是PostgreSQL中timestamp with time zone

回答

0

Postgres确实没有datetime数据类型。它没有AUTOINCREMENT属性。 Django必须向您显示这些内容,将Pstgres timestamp转换为datetimeSERIAL转换为AUTOINCREMENT

PS SERIAL本身也不是数据类型。

这里是我改变你的语句Postgres的一个:

t=# CREATE TABLE "myapp_event" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "start" datetime NOT NULL); 
ERROR: syntax error at or near "AUTOINCREMENT" 
LINE 1: ... "myapp_event" ("id" integer NOT NULL PRIMARY KEY AUTOINCREM... 
                  ^
t=# CREATE TABLE "myapp_event" ("id" SERIAL PRIMARY KEY, "start" datetime NOT NULL); 
ERROR: type "datetime" does not exist 
LINE 1: ...E "myapp_event" ("id" SERIAL PRIMARY KEY, "start" datetime N... 
                  ^
t=# CREATE TABLE "myapp_event" ("id" SERIAL PRIMARY KEY, "start" timestamp NOT NULL); 
CREATE TABLE 
+0

我的版本是9.6,我跑的语句与'psql' –

+0

没有后顾之忧。让我们只是扫除评论,因为它们是无关紧要的:) –