2012-03-22 20 views
45

No entiendo qué está mal con esta consulta? La herramienta de consulta no quiere crear una tabla en PostgreSQL. "AUTO_INCREMENT BIGINT (20) no es nulo"create table en 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

¿Qué error se puede conseguir? – Mark

+0

ERROR: error de sintaxis en o por "(" estado SQL cerca de: 42601 Carácter: 41 –

+1

también consigo ERROR: error de sintaxis en o cerca "(" LÍNEA 2: bigint article_id (20) NO AUTO_INCREMENT NULL, – Mark

Respuesta

93

Primero el bigint(20) not null auto_increment no va a funcionar, basta con utilizar bigserial primary key. Entonces datetime es timestamp en PostgreSQL. En definitiva:

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

Sobre por qué, 'auto_increment' es una característica de MySQL. Postgres utiliza columnas' serial' para el mismo propósito. –

+2

@BradKoch: Sí y no. PostgreSQL ofrece 'serial' y' bigserial '. Dado que la Q contiene' bigint (20) ', he elegido' bigserial' en mi respuesta. Esta es una mejor coincidencia en este caso. –

+1

Dado el aparente caso de uso de OP como motor de artículos de blog, un tamaño de serie máximo de 2 mil millones las entradas (en serie) deberían ser suficientes a menos que sea extremadamente prolífico.;) Pero, aún así, bigserial es una coincidencia más cercana a bigint. –

2

Reemplazar por "BIGSERIAL no nula" y "fecha y hora" por fecha y hora

+0

y qué se dará? –

+8

Luego crear tabla tendrá éxito. –

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

Por favor, intente esto:

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)' no es válido en Postgres. Además, no puede especificar 'bigint' ** y **' serial' al mismo tiempo. Ver la respuesta aceptada para la sintaxis correcta –

Cuestiones relacionadas