PostgreSQL - MySQL 中声明的表的等效版本?

Jus*_*ier 5 mysql postgresql

我在 MySQL 中声明了下表:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `user_agent` varchar(150) COLLATE utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Run Code Online (Sandbox Code Playgroud)

假设我的数据库已经使用 UTF-8 编码,postgres 中表的等效定义是什么?

Dan*_*iel 8

CREATE TABLE ci_sessions (
  session_id varchar(40) NOT NULL DEFAULT '0',
  ip_address varchar(16) NOT NULL DEFAULT '0',
  user_agent varchar(150) NOT NULL,
  last_activity int4 NOT NULL DEFAULT '0',
  user_data text NOT NULL,
  PRIMARY KEY (session_id)
);
Run Code Online (Sandbox Code Playgroud)

恕我直言,修饰符 IF NOT EXISTS 刚刚被添加到最新的 PostgreSQL 版本之一。

编辑:正如未命名的马推荐的那样,我将第四个属性从十进制(10)更改为int4。但我也更喜欢这里的时间戳(0)。如果您需要微秒精度,则仅使用时间戳而不带 (0)。