PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/12/2009 16:55:55

roya
Membre

Migration de schéma de Oracle à PostgreSQL

Bonjour,

Je souhaite migrer une base de données Oracle qui possède un schéma "cardplus" associé à un utilisateur "cardplus". Ce schéma / utilisateur possède lui-même un certain nombre d'objets (tables, séquences, vues, etc...).

La migration de cette base Oracle vers PostgreSQL avec ora2pg ajoute un ordre de création du schéma"cardplus" et un positionnement du "search_path" dans la migration des tables mais aucune création d'utilisateur "cardplus" :
           CREATE SCHEMA "cardplus";
           SET search_path = cardplus, pg_catalog;

Ma question est la suivante : pour se rapprocher le plus du comportement de Oracle dans la gestion d'utilisateur et de schéma,
- est-ce qu'il vaut mieux créer un schéma "cardplus" et positionner le "search_path" ? et éventuellement créer un utilisateur "cardplus" au niveau OS ?
- est-ce qu'il vaut mieux créer un schéma "cardplus" pour l'utilisateur "cardplus" avec la commande :
CREATE SCHEMA AUTHORIZATION cardplus;

Merci pour vos avis et / ou retour d'expérience.

Cordialement,
Alexandra

Hors ligne

#2 10/12/2009 18:48:35

Marc Cousin
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Pour être à peu près à l'identique d'Oracle, il suffit de créer le schema cardplus : le search_path par défaut ($user,public) créera les objets dans le schéma de l'utilisateur. L'utilisateur au niveau OS n'a rien à voir et ne servira que si vous utilisez un mécanisme de sécurité ident (probablement pas).

Votre commande CREATE SCHEMA est bonne.


Marc.

Hors ligne

#3 14/12/2009 12:26:25

roya
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Bonjour,

Merci pour votre réponse.

Si je comprends bien, sans utiliser de mécanisme de sécurité "ident", il me suffit de :
- créer le schéma cardplus
- positionner le search_path à (cardplus, public) pour que les objets soient bien créés dans le schéma cardplus.

Si je me connecte avec un utilisateur "postgres" par exemple et que je laisse le search_path à ($user,public), les objets seront créés dans le schéma postgres alors que je souhaiterais les créer dans cardplus, c'est bien ça ? Le changement du search_path est donc indispensable à moins de préfixer les ordres de création par exemple des tables par le nom du schéma cardplus, est-ce correct ?

Merci pour votre retour.

Cordialement,
Alexandra

Hors ligne

#4 14/12/2009 12:45:04

gleu
Administrateur

Re : Migration de schéma de Oracle à PostgreSQL

Si je me connecte avec un utilisateur "postgres" par exemple et que je laisse le search_path à ($user,public), les objets seront créés dans le schéma postgres alors que je souhaiterais les créer dans cardplus, c'est bien ça ?

En fait, ils seront créés dans le schéma public vu qu'il n'existe pas de schéma postgres par défaut.

Le changement du search_path est donc indispensable à moins de préfixer les ordres de création par exemple des tables par le nom du schéma cardplus, est-ce correct ?

Oui. Il est possible de le faire directement au niveau de la base (ou de l'utilisateur) plutôt que dans le fichier de configuration global. Par exemple, dans ce cas:

ALTER DATABASE base_migrée SET search_path TO 'cardbus';

Guillaume.

Hors ligne

#5 14/12/2009 12:46:20

wilka
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Bonjour,

Pour "coller" au mieux au mode de fonctionnement d'oracle, car en oracle la notion de schema est liée au user.
En postgres ces 2 notions sont distinctes.

Il serai bien de créer aussi un utilisateur (base de donnée) cardplus (même nom que le schema)


CREATE ROLE cardplus LOGIN
    NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;

Mise a jour du search path de ce user cardplus:

ALTER ROLE cardplusSET search_path=cardplus, public;

lui donner l'autorisation sur le schema cardplus

GRANT ALL ON SCHEMA cardplusTO cardplus;

Comme cela en vous connectant en cardplus, son schema par defaut sera cardplus.

(Attention si vous avez deja créé des objets avec l'utilisateur postgres dans ce schema, pensez à changer l'owner de ceux ci est de les mettre en cardplus

en se connectant en postgres faire :

ALTER TABLE cardplus.objetx OWNER TO cardplus;

)

Dernière modification par wilka (14/12/2009 12:49:28)

Hors ligne

#6 14/12/2009 13:28:39

roya
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Bonjour,

Merci pour vos réponses, cela devient tout de suite plus clair :-)
Effectivement, je pense qu'utiliser un schéma et un rôle cardplus serait le moyen de se rapprocher d'Oracle.

Dernière question, wilka me suggère de positionner le search_path à (cardplus, public) mais ora2pg (que j'utilise pour cette migration) propose par défaut (cardplus, pg_catalog). J'ai dû mal à comprendre parfaitement la différence, si vous pouvez m'éclairer encore une fois.

Merci,
Alexandra

Hors ligne

#7 14/12/2009 14:07:20

wilka
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Je ne connais pas ora2pg, peut etre à t-il besoin d'avoir acces directement à des informations se trouvant dans le pg_catalog. dans ce cas il faut lui ajouter dans search_path surtout si les requetes générées par ora2pg utilisent des objets dans pg_catalog (sans prefixer l'objet).

pg_catalog est un schema "correspondant" au schema sys d'oracle, vous trouverez un tas d'informations (trés utiles) sur les objets de la base données.
Le schema public, lui est un schema par défaut (peut etre pratique pour partager des objetcs, pouvant etre utilisés par differents users qui ont leur propre schema. quoique dans mon cas je crée un schema common pour cela, mon public est vide , non je ne suis pas un maniaque du rangement wink )

Dernière modification par wilka (14/12/2009 14:09:12)

Hors ligne

#8 14/12/2009 14:08:52

gleu
Administrateur

Re : Migration de schéma de Oracle à PostgreSQL

public est le schéma existant par défaut pour les nouvelles bases créées. pg_catalog est le schéma contenant les objets systèmes de PostgreSQL. Il n'est pas utile d'ajouter pg_catalog. Ce schéma est de toute façon considéré, qu'il soit spécifiquement indiqué dans le search_path ou pas.

Je dirais à priori qu'il vaut mieux ne pas mettre pg_catalog pour ne pas créer de confusion.


Guillaume.

Hors ligne

#9 14/12/2009 15:10:01

roya
Membre

Re : Migration de schéma de Oracle à PostgreSQL

Merci pour vos réponses !!
J'en prends bien note pour la suite de la migration.

Bonne fin de journée,
Alexandra

Hors ligne

Pied de page des forums