2012-03-22 27 views
45

Bu sorguda neyin yanlış olduğunu anlamıyorum? Sorgu aracı PostgreSQL'de bir tablo oluşturmak istemiyor. tarafındanpostgreSQL içinde tablo oluşturma

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

Hangi hata alıyorum? – Mark

+0

HATA: ya da yakınında "(" SQL durum sözdizimi hatası: 42601 Karakter: at sözdizimi hatası veya yakınındaki "(" SATIR 2:: 41 –

+1

Ben de HATA olsun makale_kimliği Bigint (20) NOT NULL auto_increment, – Mark

cevap

93

İlk bigint(20) not null auto_increment çalışmaz, sadece bigserial primary key kullanın. Sonra datetime, PostgreSQL'de timestamp'dur. Sonuçta:

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" bir MySQL özelliğidir. Postgres, aynı amaçla "seri" sütunlar kullanır. –

+2

@BradKoch: Evet ve hayır PostgreSQL, 'seri' ve 'bigserial'ı sunar Q. 'bigint (20) içerdiğinden,' bigserial' ı cevabımdan seçmiştim. Bu durum daha iyi bir eşleşti. –

+1

Bir blog makale motoru olarak OP'nin görünen kullanım durumu göz önüne alındığında, maksimum 2 milyar Son derece verimli olmadıkça, girişler (seri) yeterli olmalıdır.) Ama yine de, bigserial daha yakın bir bigint. –

2

Değiştir "bigint (20) değil boş auto_increment" "boş değil bigserial" ve zaman damgası ile "datetime"

+0

ve hangi –

+8

vereceği zaman tabloyu başlatacak –

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

bu deneyin:

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'te geçersiz. Ek olarak, aynı anda 'bigint' ** ve **' serial'ı belirleyemezsiniz. Doğru sözdizimi için kabul edilen cevaba bakın. –