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

#1 23/09/2016 13:45:40

Peters Alain
Membre

Version 9.5.4 : utilisation de RLS (row level security)

J'ai créé une policy sur une table .  J'ai créé un user et j'ai donné accès à cette table avec les restrictions définies au niveau de la policy .

Cà marchait bien ,  puis tout à coup ,  la table a disparu comme si elle n'existait plus .  J'ai essayé de la recréer et j'ai eu un message d'erreur signalant qu'elle existait encore : ERROR:  type "alain"
already exists
HINT:  A relation has an associated type of the same name, so you must use a
name that doesn't conflict with any existing type.

Dans pg_tables , la table n'existe plus .  Par contre elle existe encore dans pg_type.

J'ai essayé de dropper la policy sans succès parce que la table associée à la policy n'existe plus .

Après qques recherches j'ai retrouvé les données de ma table dans une table nommée pg_catalog.pg_rowsecurity.

Ma question :  comment procéder pour recréer ma table ?

Hors ligne

#2 23/09/2016 20:05:42

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

Quel est le résultat de la requête suivante :

SELECT relnamespace, relname FROM pg_class WHERE relname='votre nom de table';


Guillaume.

Hors ligne

#3 26/09/2016 08:05:46

Peters Alain
Membre

Re : Version 9.5.4 : utilisation de RLS (row level security)

Bonjour,

aucun record trouvé

Alain

Hors ligne

#4 26/09/2016 09:34:23

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

Donc la table n'existe plus. Il vous suffit de supprimer le type du même nom que votre table.


Guillaume.

Hors ligne

#5 26/09/2016 09:54:50

Peters Alain
Membre

Re : Version 9.5.4 : utilisation de RLS (row level security)

J'ai deleté pg_type .  Maintenant j'essaie de renomme la table pg_catalog.pg_rowsecurity to alain (nom de la table qui a disparu) .

et j'ai le message suivant :

ERROR:  cache lookup failed for type 18279

Hors ligne

#6 26/09/2016 11:50:43

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

Comment ça, vous avez "deleté pg_type" ? quelle requête exacte avez-vous exécuté ?


Guillaume.

Hors ligne

#7 26/09/2016 11:59:01

Peters Alain
Membre

Re : Version 9.5.4 : utilisation de RLS (row level security)

J'ai lancé la commande delete from pg_type WHERE typname='alain';    

Il fallait faire quoi ?

Hors ligne

#8 26/09/2016 14:42:17

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

Un DROP TYPE. Là, vous venez de casser votre base. Il ne vous reste plus qu'à la sauvegarder et à la restaurer. Si vous pouvez parce qu'en tripotant les catalogues systèmes comme ça, c'est même pas dit que vous puissiez.

Et pour la prochaine fois, on ne fait jamais d'insertion, de modification ou de suppression sur les tables systèmes. JAMAIS JAMAIS JAMAIS.


Guillaume.

Hors ligne

#9 26/09/2016 14:57:30

Peters Alain
Membre

Re : Version 9.5.4 : utilisation de RLS (row level security)

Ok , mais j'avais déjà essayé le drop de pg_type sans succès. Le système me disait de dropper la table .  Ceci dit,  je ne trouve pas normal que l'on puisse deleter des records dans des tables systèmes.

Cela mis à part ,   comment expliquer qu'à un certain moment j'ai perdu cette table ou plus précisément qu'elle ait été renommée en pg_catalog.pg_rowsecurity ?

Merci de m'éclairer à ce sujet .

Hors ligne

#10 26/09/2016 16:01:47

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

Ceci dit,  je ne trouve pas normal que l'on puisse deleter des records dans des tables systèmes.

Vous êtes connecté en tant que superutilisateur, vous avez tous les droits. En tant qu'utilisateur simple, vous n'auriez pas pu.

comment expliquer qu'à un certain moment j'ai perdu cette table ou plus précisément qu'elle ait été renommée en pg_catalog.pg_rowsecurity ?

Aucune idée mais comme vous manipulez les catalogues systèmes de cette façon, tout est possible.


Guillaume.

Hors ligne

#11 26/09/2016 16:14:14

Peters Alain
Membre

Re : Version 9.5.4 : utilisation de RLS (row level security)

Je decouvre Postgres et essaye de comprendre .

Je peux vous certifier que je ne manipule pas les catalogues system .  Si j'ai deleté un record c'est après avoir rencontré le problème décrit dans mon mail d'origine.

Pour info, après avoir deleté le record dans pg_type, j'ai pu  recréer ma table et la policy qui y est associée.. 

Par contre je n'arrive pas à dropper la table pg_catalog.pg_rowsecurity :  message error   ERROR: cache lookup failed for type 18279

Merci pour votre aide

Hors ligne

#12 26/09/2016 21:11:56

gleu
Administrateur

Re : Version 9.5.4 : utilisation de RLS (row level security)

je n'arrive pas à dropper la table pg_catalog.pg_rowsecurity :  message error   ERROR: cache lookup failed for type 18279

Pas très étonnant après la suppression de la ligne dans pg_type. Encore une fois, la seule solution efficace et la plus sûre, c'est de restaurer la base à partir d'une sauvegarde.


Guillaume.

Hors ligne

Pied de page des forums