2012-03-22 3 views
45

Я не понимаю, что не так с этим запросом? Инструмент запроса не хочет создавать таблицу в PostgreSQL.create table в postgreSQL

CREATE TABLE article (
article_id bigint(20) NOT NULL auto_increment, 
article_name varchar(20) NOT NULL, 
article_desc text NOT NULL, 
date_added datetime default NULL, 
PRIMARY KEY (article_id) 
); 
+1

Какую ошибку вы получаете? – Mark

+0

ОШИБКА: ошибка синтаксиса в или около "(" SQL состояние: 42601 Характер: 41 –

+1

Я также получаю ошибку: ошибка синтаксиса или вблизи "(" ЛИНИЯ 2: article_id BIGINT (20) NOT NULL AUTO_INCREMENT, – Mark

ответ

93

Сначала bigint(20) not null auto_increment не будет работать, просто используйте bigserial primary key. Затем datetime - timestamp в PostgreSQL. В целом:

CREATE TABLE article (
    article_id bigserial primary key, 
    article_name varchar(20) NOT NULL, 
    article_desc text NOT NULL, 
    date_added timestamp default NULL 
); 
+3

О том, почему 'auto_increment' является функцией MySQL. Postgres использует колонки' serial' для этой же цели. –

+2

@BradKoch: Да и нет. PostgreSQL предлагает 'serial' и' bigserial 'Так как Q содержит' bigint (20) 'я выбрал' bigserial' в моем ответе. Это лучшее совпадение в этом случае. –

+1

Учитывая очевидный вариант использования OP как движок статьи блога, максимальный размер в 2 миллиарда записи (серийные) должны быть достаточными, если только он не является чрезвычайно плодовитым.;) Но, тем не менее, bigserial является более близким к BIGINT. –

2

Заменить "BIGINT (20) не нулевой auto_increment" по "bigserial не нуль" и "Дата и время" с помощью временной метки

+0

и что он будет давать? –

+8

Затем создайте таблицу с успехом. –

3
-- Table: "user" 

-- DROP TABLE "user"; 

CREATE TABLE "user" 
(
    id bigserial NOT NULL, 
    name text NOT NULL, 
    email character varying(20) NOT NULL, 
    password text NOT NULL, 
    CONSTRAINT user_pkey PRIMARY KEY (id) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE "user" 
    OWNER TO postgres; 
-2

Пожалуйста, попробуйте следующее:

CREATE TABLE article (
    article_id bigint(20) NOT NULL serial, 
    article_name varchar(20) NOT NULL, 
    article_desc text NOT NULL, 
    date_added datetime default NULL, 
    PRIMARY KEY (article_id) 
); 
+0

'bigint (20)' недействителен в Postgres. Кроме того, вы не можете одновременно указывать 'bigint' ** и **' serial'. См. Принятый ответ для правильного синтаксиса –