代码之家  ›  专栏  ›  技术社区  ›  xRobot

如何将这两个查询从mysql转换成postgresql?:

  •  0
  • xRobot  · 技术社区  · 15 年前

    如何在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);
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   OMG Ponies    15 年前

    用途:

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

    当前的时间戳是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一样,使用 sequences 对于自动增量行为:

    CREATE SEQUENCE example_seq START 1;
    

    然后,需要在insert语句中调用nextval([序列名])来填充主键:

    INSERT INTO example (id) VALUES (NEXTVAL(example_seq))
    
        2
  •  1
  •   colinmarc    15 年前

    我会把我自己的答案贴出来。这是你的 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 . 你的问题似乎很好。