[Linux] comment adapter la syntaxe pour PostgreSQL

Christophe Courtois christophe@::1
Mar 16 Jan 16:45:46 CET 2018


Le 15/01/2018 à 16:19, Bernard Schoenacker a écrit :
> bonjour,
> j'ai un exemple pour mariadb et je souhaite
> le faire passer à postgresql ...

Je mets ce qui suit pour le principe et pour le sport, mais il est un
peu illusoire de vouloir recréer à la main une base pour un outil qui
doit déjà avoir ses scripts de création de base dans un coin, et qui
risque de planter au moindre écart avec ce qu'il attend, sans compter
l'algo de cryptage utilisé à la fin dont je ne sais rien.


Option 1 :
- Si tu as une base déjà fonctionnelle, dégainer l'artillerie lourde
avec le script ora2pg qui convertit aussi les bases MySQL (produit
Oracle), donc sans doute MariaDB;

Option 2
- Exécuter chaque ordre et chercher à le convertir avec
https://www.postgresql.org/docs/10/static/index.html sous la main.

Quelques notes en passant (désolé je n'ai pas respecté les > ). Au
passage, supprimer tous les `

mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'mot_de_passe';

PostgreSQL : CREATE ROLE postfix LOGIN PASSWORD 'mdp' ;
(Et le filtrage par IP se fait dans pg_hab.conf)


mysql> GRANT USAGE ON * . * TO 'postfix'@'localhost' IDENTIFIED BY
'mot_de_passe';

PG : Peut-être inutile si les tables sont dans le schémas public.
Sinon: GRANT USAGE ON SCHEMA toto TO postfix ;

mysql> CREATE DATABASE `postfix` ;

PG : pareil

mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';

GRANT ALL ON ALL TABLES IN SCHEMA toto TO postfix.

mysql> FLUSH PRIVILEGES;

PG: cette horreur est inutile.

mysql> quit

PG:  \q

//
CREATE USER 'postfix'@'localhost' IDENTIFIED BY  '***';

PG : cf plus haut

GRANT USAGE ON * . * TO  'postfix'@'localhost' IDENTIFIED BY  '***' WITH
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0
MAX_USER_CONNECTIONS 0 ;

PG : pas d'équivalent à ces paramètres






USE postfix;

PG: \c postfix


CREATE TABLE `domaines` (
  `domaine` varchar(255) NOT NULL default '',

PG : domaine varchar(255) NOT NULL default '' PRIMARY KEY

  `etat` tinyint(1) NOT NULL default '1',

PG: smallint not null default 1

  PRIMARY KEY  (`domaine`)

PG: déplacé + haut

) ENGINE=InnoDB;

PG : cette abomination n'existe pas


CREATE TABLE `comptes` (
  `email` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `quota` int(10) NOT NULL default '0',

je ne connais pas int(10) ?!

  `etat` tinyint(1) NOT NULL default '1',
  `imap` tinyint(1) NOT NULL default '1',
  `pop3` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`email`)
) ENGINE=InnoDB;
CREATE TABLE `alias` (
  `source` varchar(255) NOT NULL default '',
  `destination` text NOT NULL,
  `etat` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`source`)
) ENGINE=InnoDB;
..........................................................................................
INSERT INTO `postfix`.`comptes` ( `email` , `password` , `quota` ,
`etat` , `imap` , `pop3` ) VALUES ('happy-tux@::1', ENCRYPT(
'mon_beau-mot-de-passe' ) , '0', '1', '1', '1');

 encrypt, voir l'extension pgcrypto (fournie avec PostgreSQL).



-- 
Christophe Courtois


Plus d'informations sur la liste de diffusion linux