Как перевести эти 2 запроса из Mysql в Postgresql? :

0

Как я могу перевести эти 2 запроса в 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;

Query:

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 от стандарта с обратными кавычками.
Теги:
database

2 ответа

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, использует последовательности для поведения AUTO_INCREMENT:

CREATE SEQUENCE example_seq START 1;

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

INSERT INTO example (id) VALUES (NEXTVAL(example_seq))
  • 1
    Я проголосовал, но я почти уверен, что «последовательный» тип данных работает достаточно хорошо для нужд простого идентификатора, не так ли?
  • 0
    @colinmarc: я не знаком с типом последовательных данных.
Показать ещё 16 комментариев
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. Ваш запрос кажется прекрасным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню