2010-06-07 2 views
0

Как я могу перевести эти 2 вопроса в postgresql? :Как перевести эти 2 запроса от Mysql в Postgresql? :

CREATE TABLE `example` ( 
    `id` int(10) unsigned NOT NULL auto_increment,  
    `from` varchar(255) NOT NULL default '0',  
    `message` text NOT NULL,  
    `lastactivity` timestamp NULL default '0000-00-00 00:00:00',  
    `read` int(10) unsigned NOT NULL,  
    PRIMARY KEY (`id`),  
    KEY `from` (`from`)  
) DEFAULT CHARSET=utf8; 

Запрос:

SELECT * 
FROM table_1 
LEFT OUTER JOIN table_2 ON (table_1.id = table_2.id) 
WHERE (table_1.lastactivity > NOW()-100); 
+0

Существует только один запрос, хотя два оператора SQL. ISTM, что ваша единственная реальная проблема: «Как NOW() - 100 в PostgreSQL сопоставляется с MySQL» (если ваш вопрос не идет наоборот), переходя от MySQL к PostgreSQL). Если вы отправляетесь в PostgreSQL, вам, скорее всего, придется использовать идентификаторы с разделителями стандартных SQL в двойных кавычках '' from ''вместо отклонения MySQL от стандартных с обратными кавычками. –

ответ

2

Использование:

SELECT * 
    FROM table_1 t1 
LEFT JOIN table_2 t2 ON t2.id = t1.id 
    WHERE t1.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days' 

CURRENT_TIMESTAMP является стандартом ANSI, и работает на Oracle, MySQL, Postgres, SQL Server ...

Вот преобразованный оператор таблицы CREATE:

CREATE TABLE example (
    id INTEGER PRIMARY KEY, 
    "from" VARCHAR(255) NOT NULL DEFAULT '0', 
    message text NOT NULL, 
    lastactivity timestamp DEFAULT NULL, 
    read INTEGER NOT NULL 
) 

Я не могу найти ничего о Postgres позволяют наборы символов за стол, только что вы должны установить поддержку UTF8 используя UNICODE ключевого слово при создании базы данных:

CREATE DATABASE your_db WITH ENCODING 'UNICODE'; 
$ createdb -E UNICODE your_db --CLI version 

Postgre, как Oracle, использует sequences для AUTO_INCREMENT поведение:

CREATE SEQUENCE example_seq START 1; 

Затем вам нужно вызвать NEXTVAL ([ваше имя последовательности]) в операторе вставки для заполнения первичного ключа:

INSERT INTO example (id) VALUES (NEXTVAL(example_seq)) 
+1

Я одобрил, но я уверен, что тип данных «serial» работает достаточно хорошо для простых потребностей идентификатора, не так ли? – colinmarc

+0

@colinmarc: Я не знаком с типом последовательных данных. –

+0

http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-SERIAL serial позволяет использовать DEFAULT или не указывать, и он будет автоматически увеличиваться. В моих таблицах я всегда использую «id» serial PRIMARY KEY. – colinmarc

1

Я просто отправлю свой собственный ответ. Вот ваш CREATE:

CREATE TABLE "example" ( 
    "id" serial PRIMARY KEY,  
    "from" varchar(255) NOT NULL DEFAULT '0',  
    "message" text NOT NULL,  
    "lastactivity" timestamp NULL DEFAULT NULL,  
    "read" integer NOT NULL 
); 

Обратите внимание, что serial выполняет int(11) NOT NULL auto_increment, и что integer используется вместо int. Ваш запрос кажется прекрасным.

Смежные вопросы