Autorisation refusée de créer "pg_catalog.tablename" pendant pg_dump ciblant une autre machine

11

J'essaie de vider certaines tables d'une version 9.5 beta 2 vers un serveur 9.4.4. La forme de la commande que j'utilise est assez standard:

pg_dump -t table dbname | psql -h hostname -d dbname

J'utilise l'utilisateur Postgres, ce qui, je le sais, n'est probablement pas idéal, mais comme ce sont les deux boîtiers de traitement de données de développement que seul j'utilise et que cela est pertinent pour l'erreur qui suit. Au départ, j'ai eu l'erreur

ERREUR: paramètre de configuration non reconnu "row_security"

ce qui est attendu car cette fonctionnalité est nouvelle dans 9.5, et, oui, je me rends compte qu'il n'est pas conseillé de pg_dump entre les différentes versions de Postgres, mais, malheureusement inévitable, étant donné que j'ai rencontré un bug très obscur et que je dois déplacer un grand quantité de données statiques une fois.

Donc, en utilisant ce hack hideux pour supprimer l'erreur row_security, et en activant stop on first error:

pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname

Je reçois maintenant:

ERREUR: autorisation refusée de créer "pg_catalog.tablename" DÉTAIL: les modifications du catalogue système sont actuellement interdites

Bien qu'il puisse être indésirable d'utiliser le rôle / utilisateur Postgres, je crois qu'il ne devrait pas y avoir de problèmes d'autorisation de cette nature. Je suis ouvert à toutes suggestions en gardant à l'esprit qu'il s'agit d'une opération ponctuelle et qu'il s'agit de boîtes de développement de traitement de données non connectées à des services en direct, donc l'opportunité est préférable aux politiques d'accès aux données d'entreprise idéales. Cela dit, il serait bon de comprendre comment procéder correctement et éviter cela à l'avenir.

John Powell
la source

Réponses:

13

Cela se révèle être dû à un message d'erreur quelque peu obscur qui se produit lorsque le schéma à partir duquel vous effectuez le vidage avec pg_dump n'existe pas sur la base de données / machine cible. Je vais laisser cette question, dans l'espoir que cela puisse aider quelqu'un d'autre.

John Powell
la source
Cela m'est arrivé aussi, heureusement, je l'ai trouvé. Juste créé manuellement le schéma «public» et cela a fonctionné.
Robert Mikes
@RobertMikes. Heureux de vous aider. C'est une erreur quelque peu obscure.
John Powell
Merci - heureusement, j'ai trouvé cela avant de m'y impliquer trop!
James Fry
+1. Ce problème m'a aussi fait trébucher!
Jay Cummins du