Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将这2个查询从Mysql转换为Postgresql?:_Mysql_Database_Postgresql - Fatal编程技术网

如何将这2个查询从Mysql转换为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',

如何在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);
使用:

当前的时间戳是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”不起作用,它不是有效的时间戳。默认值为空。此外,根据