Может ли эта таблица Postgresql быть преобразована в таблицу MySql? - PullRequest
1 голос
/ 25 января 2010

С учетом схемы таблицы Postgresql:

create table thing (
    id serial primary key,
    key text,
    type int references thing,   
    latest_revision int default 1,
    created timestamp default(current_timestamp at time zone 'utc'),
    last_modified timestamp default(current_timestamp at time zone 'utc')
);
$for name in ['key', 'type', 'latest_revision', 'last_modified', 'created']:
    create index thing_${name}_idx ON thing($name);

Есть две строки, которые я не понимаю, и мне интересно, можно ли вообще преобразовать их в схему таблиц MySql? Может ли следующая строка быть преобразована во что-то, что MySql поймет, как, по-видимому, ссылается на себя:

type int references thing,

Плюс, есть ли MySql-эквивалент для последней строки:

$for name in ['key', 'type', 'latest_revision', 'last_modified', 'created']:
    create index thing_${name}_idx ON thing($name);

Ответы [ 3 ]

2 голосов
/ 25 января 2010

Строка references является внешним ключом, вы можете использовать что-то подобное в MySQL:

CREATE TABLE thing (
   ...
   type int,
   FOREIGN KEY (type) REFERENCES thing (id),
   ...
);

Последние две строки не в SQL, это некоторый язык сценариев. Он просто создает индексы по указанным столбцам:

CREATE INDEX thing_key_idx ON thing (key);
CREATE INDEX thing_type_idx ON thing (type);
...
0 голосов
/ 25 января 2010

Итак, из того, что вы все мне рассказываете, это будет эквивалентная схема таблицы MySql исходной таблицы Postgresql:

--
-- Table structure for table `thing`
--
CREATE TABLE IF NOT EXISTS `thing` (
  `id` int NOT NULL auto_increment,
  `key` text,
  `type` int,
  `latest_revision` tinyint NOT NULL default '1',
  `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `last_modified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
-- 
-- Constraints for table `thing`
-- 
ALTER TABLE `thing`
  ADD CONSTRAINT `thing_ibfk_1` FOREIGN KEY (`type`) REFERENCES `thing` (`id`);
0 голосов
/ 25 января 2010

Эта последняя строка выглядит как python, и это заставило меня поверить, что она пришла от pgloader , широко используемой программы на python. Или программа ad-adhoc python. Это неверный синтаксис AFAIK в pg или psql.

А бит references foo является внешним ключом первичного ключа таблицы foo. Если столбец не указан, по умолчанию используется первичный ключ.

Проверьте документы на создать таблицу для получения дополнительной информации.

...