如何将这2个查询从Mysql转换为Postgresql?:
如何在postgresql中翻译这两个查询如何将这2个查询从Mysql转换为Postgresql?:,mysql,database,postgresql,Mysql,Database,Postgresql,如何在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',
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);
使用:
当前的时间戳是ANSI标准,适用于Oracle、MySQL、Postgres、SQL Server
下面是转换后的CREATE table语句:
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允许每个表使用字符集的信息,只是在创建数据库时使用UNICODE关键字设置UTF8支持:
CREATE DATABASE your_db WITH ENCODING 'UNICODE';
$ createdb -E UNICODE your_db --CLI version
Postgre与Oracle一样,用于自动增量行为:
CREATE SEQUENCE example_seq START 1;
然后,您需要在insert语句中调用NEXTVAL([您的序列名])来填充主键:
INSERT INTO example (id) VALUES (NEXTVAL(example_seq))
使用:
当前的时间戳是ANSI标准,适用于Oracle、MySQL、Postgres、SQL Server
下面是转换后的CREATE table语句:
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允许每个表使用字符集的信息,只是在创建数据库时使用UNICODE关键字设置UTF8支持:
CREATE DATABASE your_db WITH ENCODING 'UNICODE';
$ createdb -E UNICODE your_db --CLI version
Postgre与Oracle一样,用于自动增量行为:
CREATE SEQUENCE example_seq START 1;
然后,您需要在insert语句中调用NEXTVAL([您的序列名])来填充主键:
INSERT INTO example (id) VALUES (NEXTVAL(example_seq))
我会发布我自己的答案。以下是您的
创建:
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自动增量
,并且使用integer
代替int
。你的问题似乎很好。我会发布我自己的答案。以下是您的创建:
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自动增量
,并且使用integer
代替int
。您的查询似乎很好。虽然有两条SQL语句,但只有一条“查询”。我想你唯一真正的问题是“PostgreSQL中的NOW()-100如何映射到MySQL”(除非你的问题是相反的——从MySQL到PostgreSQL)。如果您要使用PostgreSQL,可能需要在“
的双引号”中使用SQL标准分隔标识符,而不是使用带反引号的MySQL标准偏差。虽然有两个SQL语句,但只有一个“查询”。我想你唯一真正的问题是“PostgreSQL中的NOW()-100如何映射到MySQL”(除非你的问题是相反的——从MySQL到PostgreSQL)。如果您要使用PostgreSQL,可能需要使用“
中的双引号”中的SQL标准分隔标识符,而不是带反引号的MySQL标准偏差。我投了赞成票,但我非常确定“串行”数据类型足以满足简单的id需求,是吗?@colinmarc:我不熟悉串行数据类型。串行允许您使用默认值或不指定,它将自动递增。在我的表中,我总是使用“id”串行主键。默认值“0000-00-00 00:00:00”不起作用,它不是有效的时间戳。默认值为NULL是允许的。另外,根据我的意见,现在()比PostgreSQL中的当前时间戳更可取,但我很确定“串行”数据类型对于简单的id需求来说已经足够好了,不是吗?@colinmarc:我不熟悉串行数据类型。串行允许您使用默认值或不指定,它将自动递增。在我的表中,我总是使用“id”串行主键。默认值“0000-00-00 00:00:00”不起作用,它不是有效的时间戳。默认值为空。此外,根据