У меня есть следующая таблица, объявленная в 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;
Каким будет эквивалентное определение таблицы в postgres, если моя база данных уже использует кодировку UTF-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)
);
Модификатор IF NOT EXISTS имеет IMHO только что добавлен в одну из новейших версий PostgreSQL.
РЕДАКТИРОВАТЬ. Как рекомендовала неназванная лошадь, я изменил 4-й атрибут из десятичной (10) в int4. Но я бы предпочел также временную метку (0). Используйте только временную метку без (0), если вам нужна микросекундная точность здесь.
В дополнение к тому, что сказал Даниил:
Если вам нужно запросить IP-адрес, для этого лучше использовать собственный тип данных inet:
http://www.postgresql.org/docs/current/static/datatype-net-types.html
Имя столбца last_activity предлагает столбец временной отметки или что-то подобное. Я бы настоятельно рекомендовал использовать для этого тип данных timestamp
.
Если это что-то другое, то integer
лучше соответствует MySQL int(10)
, чем десятичному.
Обратите внимание, что int (10) в MySQL не определяет диапазон значений, это просто подсказка для отображения целей!
utf8_bin
иCOLLATE
просто посторонние, тогда?