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 28/12/2009 15:41:56

unisol
Membre

importation access vers postgres

Bonjour,

j'ai importé une base de données ACCESS dans postgres par le moyen d'un export
via le menu access "Export" et la présence d'une passerelle ODBC postgres.

Mon problème réside dans le fait que les champs de type "Auto-incrément"
ont disparus et été transformés par un type "Integer"

après quelques recherches, le type "Auto-incrément" se nomme "Serial" sous Postgres.
A noter que lors de l'edition des propriétés de mon Id (Integer) dans l'intention de le
transformer en "Serial", ce choix n'est pas possible. Je peux certes le changer en
d'autres types, mais pas "Serial".

questions annexe.
existe t'il un outil pour exporter toutes une base access vers postgres et qui marche...

Merci pour aide.

unisol,

Hors ligne

#2 28/12/2009 15:50:11

gleu
Administrateur

Re : importation access vers postgres

serial est un pseudo-type qui est ensuite transformer en integer avec une valeur par défaut correspondant à la valeur suivante d'une séquence. Donc le fait qu'il ait transformé la colonne auto-incrémentée par une colonne de type integer n'est pas une erreur. Par contre, il aurait dû ajouter une séquence et la lier à la colonne. Si c'est le seul problème, autant le faire soi-même, c'est assez rapide.


Guillaume.

Hors ligne

#3 28/12/2009 15:52:12

gleu
Administrateur

Re : importation access vers postgres

Quant aux outils de migration, voir http://wiki.postgresql.org/wiki/Convert … oft_Access


Guillaume.

Hors ligne

#4 28/12/2009 15:54:19

unisol
Membre

Re : importation access vers postgres

Bonjour,

merci pour votre réponse.
cette partie de votre réponse est peu claire pour moi.

"Par contre, il aurait dû ajouter une séquence et la lier à la colonne"

je comprend par la qu'une autre colonne doit cooexister en parallèle ?
pouvez me donner un exemple, car je galère depuis plusieurs jours.

merci

Hors ligne

#5 28/12/2009 16:00:49

Marc Cousin
Membre

Re : importation access vers postgres

Un exemple :

test=# CREATE TABLE toto (a serial);
NOTICE:  CREATE TABLE will create implicit sequence "toto_a_seq" for serial column "toto.a"
CREATE TABLE
test=# \d toto
                         Table "public.toto"
 Column |  Type   |                    Modifiers
--------+---------+--------------------------------------------------
 a      | integer | not null default nextval('toto_a_seq'::regclass)

test=# \d toto_a_seq
         Sequence "public.toto_a_seq"
    Column     |  Type   |        Value
---------------+---------+---------------------
 sequence_name | name    | toto_a_seq
 last_value    | bigint  | 1
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 1
 is_cycled     | boolean | f
 is_called     | boolean | f

Les séquences sont des objets différents des tables. Mais souvent utilisés pour faire des champs auto incrémentés.
Pour plus d'infos sur les séquences :
http://docs.postgresql.fr/8.4/sql-createsequence.html

Si j'avais voulu créer ma colonne a de la table toto en tant qu'entier et ensuite utiliser une séquence, j'aurais du faire (je choisis délibérément dans l'exemple de créer une nouvelle séquence) :

CREATE sequence seq2;
CREATE SEQUENCE
test=# ALTER TABLE toto ALTER a SET default nextval('seq2'::regclass);
ALTER TABLE

Marc.

Hors ligne

#6 28/12/2009 16:01:19

gleu
Administrateur

Re : importation access vers postgres

Tout ça se trouve dans le chapitre 8.1.4 de la documentation : http://docs.postgresqlfr.org/8.4/dataty … ype-serial


Guillaume.

Hors ligne

#7 28/12/2009 18:06:24

unisol
Membre

Re : importation access vers postgres

Bonjour,
je suis arrivé àreproduier certains de tes indications
creation de trable, ajout de données etc... ça marche
j'ai bien compris que l'objet sequence est "différent" du simple concepte "autoincrement"
je crois meme percevoir une bien plus grande puissance.

ce que je j'ai réussi à créer est une table toto avec un champs memo
et lien ce champs à une sequence.
le champs a ne se complete de lui meme .
mais ceci n'est pas grave pour le moment
car mes champs champs "id" eux le sont
mais lorsque j'écris :

CREATE SEQUENCE equipements_id_seq;
CREATE SEQUENCE
ALTER TABLE equipements ALTER id_equipement SET default nextval('equipements_id_seq'::regclass);
ALTER TABLE

j'ai dabord une erreur au mot "TABLE"
j'au exécuté les 2 premières lignes sans erreurs
puis avec les 2 dernières
j'ai ceci :

ERREUR:  erreur de syntaxe sur ou près de « TABLE »
LINE 3: ALTER TABLE equipements ALTER id_equipement SET default next...
              ^

********** Erreur **********

ERREUR: erreur de syntaxe sur ou près de « TABLE »
État SQL :42601
Caractère : 59

Hors ligne

#8 28/12/2009 18:27:43

gleu
Administrateur

Re : importation access vers postgres

Il ne faut pas écrire le deuxième "CREATE SEQUENCE" ainsi que le deuxième "ALTER TABLE". C'est psql qui est sensé le renvoyer.


Guillaume.

Hors ligne

#9 03/02/2010 12:28:18

unisol
Membre

Re : importation access vers postgres

Bonjour,

je reviens vers vous afin de clarifier 2 points qui restent obscure pour moi.

j'ai transféré une base access vers postgres.
les champs de type "Autoincrement" ont disparu au passage. (normal)
je souhaite rétablir l'équivalent sous postgres;
à savoir un champ de type UNIQUE et ayant la propriété de gérer
une incrémentation de la valeur en cours contenu dans le champs.

j'ai été aidé et j'ai réussi à obtenir ce résultat.
je souhaite l'appliquer aux autres tables.
en exécutant la requête suivante :

CREATE SEQUENCE articles_id_article_seq;
ALTER TABLE articles ALTER COLUMN id_article SET DEFAULT nextval('articles_id_article_seq'::regclass);

j'arrive bien à créer une séquence et à l'attribuer:
"Valeurs par défaut" >> nextval('articles_id_article_seq'::regclass)
la propriété "Sequence" reste vide

pouvez m'aider ?

merci d'avance.

Hors ligne

#10 03/02/2010 13:01:15

Marc Cousin
Membre

Re : importation access vers postgres

La propriété Sequence de quoi ?


Marc.

Hors ligne

#11 03/02/2010 14:42:10

unisol
Membre

Re : importation access vers postgres

propriété "Sequence"
du champs articles_id
de ma table Articles sur une base Postgres

Hors ligne

#12 03/02/2010 19:04:36

Marc Cousin
Membre

Re : importation access vers postgres

Ça n'existe pas. La séquence est un objet de la base de données. On peut s'en servir pour attribuer une ou des valeurs par défaut à des colonnes pour faire une séquence, mais ce n'est qu'une des possibilités.

En fait je simplifie un peu : on peut aussi déclarer une séquence comme 'appartenant' à une colonne de table. L'intérêt étant que la séquence sera droppée en même temps que cette colonne. C'est une des choses qui se font implicitement quand on déclare une colonne comme étant de type serial.
Cf ALTER SEQUENCE : http://docs.postgresql.fr/8.4/sql-altersequence.html
l'option est owned by

Dernière modification par Marc Cousin (03/02/2010 19:05:00)


Marc.

Hors ligne

#13 03/02/2010 19:07:34

unisol
Membre

Re : importation access vers postgres

Je suis daccord avec, mais comment lier un champs à cet objet ?
merci

Hors ligne

#14 03/02/2010 19:10:51

Marc Cousin
Membre

Re : importation access vers postgres

Lier un champ à une sequence ? C'est le default nextval qui le fait :
ALTER TABLE articles ALTER COLUMN id_article SET DEFAULT nextval('articles_id_article_seq'::regclass);
dit à postgresql d'utileser la séquence articles_id_article_seq pour générer les valeurs par défaut de la colonne id_article de la table article.


Marc.

Hors ligne

#15 03/02/2010 19:15:16

unisol
Membre

Re : importation access vers postgres

ceçi a été fait, et la propriété "Valeur default" est correctement valorisé par : nextval('articles_id_article_seq'::regclass)
par contre la ligne "Sequence reste vide (je fais attention de ne pas utiliser le mot propriété :-)
ma question reste donc entère

Hors ligne

#16 03/02/2010 20:27:14

gleu
Administrateur

Re : importation access vers postgres

Une copie d'écran pourrait aider à mieux comprendre ce que vous voyez.


Guillaume.

Hors ligne

#17 04/02/2010 13:51:11

unisol
Membre

Re : importation access vers postgres

voici une capture à cette adresse (je n'ai pas d'option d'insertion d'image dans le forum)

http://unigest-solutions.com/fichiers_c … stgres.jpg

merci

Hors ligne

#18 04/02/2010 16:11:38

Marc Cousin
Membre

Re : importation access vers postgres

Cette information doit correspondre à l'option owned by de alter sequence dont je parlais quelques posts plus haut.


Marc.

Hors ligne

#19 04/02/2010 17:51:24

gleu
Administrateur

Re : importation access vers postgres

Exact, ça correspond à l'option OWNED BY.


Guillaume.

Hors ligne

#20 20/06/2013 15:14:45

BADAN
Membre

Re : importation access vers postgres

Bonjour à tous, comment allez vous? j'ai un problème avec MS Access.
Je désire transférer ma base de données de ACCESS vers POSTGRESQL. j'ai installé un pilote psqlodbc. Ensuite j'ai établie une connexion entre ma base Access et ma base de données postgreSQL. J'ai transférer mes tables de Access à postgres. Pour établir les contraintes (clé primaire et secondaire), postgres refuse. j'ai supprimé alors les données à l’intérieur des tables et il m'a permis d'établir mes contraintes. Cependant pour effectuer mes requêtes, il a fallu que je crée des  tables liées sous Access pour mettre à jour mes tables sur postgresql. lorsque je tente de copier et d coller les données à l'intérieur des tables liées pour pouvoir les retrouver sur postgres, le message suivant apparaît ODBC---Echec d'insertion sur une table<< public_cas_d_méningite>>attachée.
Es ce que vous avez été déjà confronté un problème pareille. Pouvez vous m'indiquez des solutions?

Hors ligne

Pied de page des forums