cette table Postgresql peut être converti en une table MySql?
-
22-09-2019 - |
Question
Etant donné un schéma de la table 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);
Il y a deux lignes je ne comprends pas et je me demande s'il est même possible de les convertir à un schéma de la table MySql? la ligne suivante peut être converti en quelque chose MySql comprendrait, comme il semble être lui-même référence:
type int references thing,
De plus, est-il un équivalent MySql pour la dernière ligne:
$for name in ['key', 'type', 'latest_revision', 'last_modified', 'created']:
create index thing_${name}_idx ON thing($name);
La solution
La ligne de references
est une clé étrangère, vous pouvez utiliser quelque chose comme ça dans MySQL:
CREATE TABLE thing (
...
type int,
FOREIGN KEY (type) REFERENCES thing (id),
...
);
Les deux dernières lignes ne sont pas dans SQL, il est un langage de script. Il crée simplement des index sur les colonnes mentionnées:
CREATE INDEX thing_key_idx ON thing (key);
CREATE INDEX thing_type_idx ON thing (type);
...
Autres conseils
Cette dernière ligne ressemble à python, qui me conduirait à croire que cela venait de pgloader , un programme python couramment utilisé. Ou un programme de python-Adhoc. Ce n'est pas AFAIK de syntaxe valide pg ou psql.
Et le references foo
, bit est une clé étrangère à la clé primaire de la table foo. Si aucune colonne est spécifiée par défaut, il la clé primaire.
Vérifiez la documentation sur créer la table pour plus d'informations .
Alors, de ce que vous tous me dites, ce serait un schéma de table équivalent MySql de la table Postgresql originale:
--
-- 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`);