Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
je voudrais exporter une table nommée "bievent' (d'un vieux postgres 9.2) pour l'importer dans une db de test.
Mon user n'a accès qu'en lecture mais pas en écriture (production).
PGPASSWORD=<mon passwd> pg_dump -f /tmp/lz.dmp -O -t bievent -h 127.0.0.1 -p 5433 -U <monuser> <database>
Mais j'obtiens
pg_dump: [archiver (db)] query failed: ERROR: permission denied for relation bievent_id_seq
pg_dump: [archiver (db)] query was: SELECT sequence_name, start_value, increment_by, CASE WHEN increment_by > 0 AND max_value = 9223372036854775807 THEN NULL WHEN increment_by < 0 AND max_value = -1 THEN NULL ELSE max_value END AS max_value, CASE WHEN increment_by > 0 AND min_value = 1 THEN NULL WHEN increment_by < 0 AND min_value = -9223372036854775807 THEN NULL ELSE min_value END AS min_value, cache_value, is_cycled FROM bievent_id_seq
Bref, il ne peut pas lire la séquence bievent_id_seq (qui donne l'id de la table) , refuse de faire un dump, mais ce n'est pas la séquence que je veux exporter mais bien la table.
J'ai essayé sans succès:
* d'ajouter -a
* d'ajouter --inserts
* d'ajouter -T bievent_id_seq
Comment puis-je faire pour n'exporter QUE la table?
Merci.
Hors ligne
La séquence appartient à la table, et de ce fait, elles sont indissociables. Je ne vois que deux solutions :
1. supprimer le lien entre la séquence et la table ("alter sequence bievent_id_seq owned by none").
2. donner le droit de lecture sur la séquence ("grant select on sequence bievent_id_seq to <monuser>").
Grosse préférence pour la 2.
Guillaume.
Hors ligne
Hors ligne
Effectivement, il semble qu'on ne puisse pas dire à pg_dump de ne pas lire les séquences liées quand on extrait le contenu d'une table, mais on peut utiliser plus simplement COPY pour exporter le contenu de la table (ce que fait d'ailleurs pg_dump, avec plein d'autres choses qui ne vous intéressent pas dans le cas présent), sans avoir aucun droit sur les séquences liées.
psql [options] -c 'COPY nomtable TO STDOUT' > export-table.sql
Si la table est déjà créée dans la base cible, le contenu peut se recharger dans cette base avec la commande en sens inverse:
psql [options] -c '\copy nomtable FROM export-table.sql'
Si la structure de la table n'existe pas déjà dans la base cible et qui faut l'extraire au préalable de la base source, c'est faisable avec
pg_dump [options] -s -t nomtable > structure-table.sql
qui est utilisable avec un compte en lecture seule sans droit d'accès aux séquences liées à la table.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Pages : 1