Vous n'êtes pas identifié(e).
Pages : 1
Ok, bon je vais tenter de me débrouiller avec ça. Merci rjuju
Bonjour,
J'aimerai supprimer une base de données précise avec la commande drop database ou dropdb mais cela ne fonctionne pas car il y a des connections actives.
psql -c "SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname ='$SCHEMA'";
Cela ne sert a rien car je suis en 8.2 et cela ne fonctionne qu'en 8.4
psql -c "SELECT pg_cancel_backend(procpid) FROM pg_stat_activity WHERE datname ='$SCHEMA'";
pg_cancel_backend
-------------------
t
t
t
(3 rows)
Cela kill les sessions actives mais j'enchaine de suite avec un drop database et cela ne fonctionne toujours pas:
database removal failed: ERROR: database "*******" is being accessed by other users
Des idées pour les plus anciens d'entre vous ?
PS: je ne peux pas migrer en 8.4 ou en 9
Merci,
Bon je m'en suis sorti, merci a vous 2. L'occasion pour moi de me rendre compte que sous postgres un user n'est pas égal a un schéma comme sous Oracle ^^.
ça ne fonctionne pas Gleu merci quand même, je l'ai dit dans le texte initial du sujet. Je suis en 8.2 ceci explique sans doute cela, inutilie de me demander de migrer ^^
Merci rjuju,
PG_Dump le fait avec quelles options ? ; je genere simplement les ddl du schéma il me sort bien les ordres de créations des triggers pour lesquelles des fonctions sont liés mais pas l'ordre de création des fonctions elles mêmes !!
Si je rajoute CREATE FUNCTION au prosrc que je récupére, il me manque les arguments passés a ses fonctions comment puis je les récupérer ?
Merci.
Bonjour,
Je n'arrive pas à récupérer le code complet pour la création de fonctions/procédures:
J'utilise:
SELECT prosrc FROM pg_proc WHERE proname='******';
Mais cela donne une source inutilisable pour recréer cette même fonction en récupérant cette source dans un script.
\df+ nom_fonction
Même chose, c'est inutilisable
La fonction get_functiondef(oid) ne fonctionne pas chez moi je suis en postgre 8.2.
Avez vous d'autres idées ?; Normalement le code que je suis censé récupérer devrait ressembler a CREATE FUNCTION .... etc .... ici ce n'est pas le cas.
Merci d'avance.
Merci a vous Frost et Rjuju, en effet c'est beaucoup plus efficace et surtout cela fonctionne.
Dans le même ordre d'idée j'essai de récupérer les ordres de créations des contraintes via pg_get_constraintdef en vain pour le momment, je n'obtiens que des noms de contraintes sans les ordres de création et j'ai des erreurs du type ERROR: could not find tuple for constraint 4855035
Je pense que je ne vais pas pouvoir récupérer les ordres via cette fonction, ces contraintes doivent être dans la définition de la table j'imagine plutôt qu'a part. Encore faut t'il que je fasse le tri. L'idée étant d'importer sans contraintes ni index pour pouvoir les reconstruire derriere.
CREATE OR REPLACE FUNCTION recup_index()
RETURNS void
AS $BODY$
DECLARE
test CURSOR FOR SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
recup int;
BEGIN
recup := 0;
for recup in test loop
EXECUTE 'COPY (SELECT pg_get_indexdef(recup)) TO 'xxxxxxxxxx/testindex.sql'';
end loop;
return;
end;
$BODY$
LANGUAGE plpgsql;
Même erreur, je suis en 8.2.6
Merci Rjuju
CREATE OR REPLACE FUNCTION recup_index()
RETURNS void
AS $BODY$
DECLARE
test CURSOR FOR SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
oid int;
BEGIN
oid := 0;
for oid in test loop
EXECUTE 'COPY (SELECT pg_get_indexdef(oid)) TO 'xxxxxxxxxxxx/testindex.sql'';
end loop;
return;
end;
$BODY$
LANGUAGE plpgsql;
Je me suis aperçu que la fonction COPY ne fonctionne qu'avec le user admin POSTGRE. J'ai donc dut faire cette commande aprés m'être connécté en tant que user postgres pour pouvoir ne serait ce que lancer ma création de procédure:
CREATE LANGUAGE plpgsql; sinon il ne reconnait pas, néanmoins j'obtiens la même erreur aprés ces essais a savoir:
psql:recupindex.sql:15: ERROR: syntax error at or near "$1"
LINE 1: $1
^
QUERY: $1
CONTEXT: SQL statement in PL/PgSQL function "recup_index" near line 6
A la ligne 6 l'on a: la declaration du curseur qui fonctionne en dehors de la procedure et la déclaration du int OID; rien de bien suspect.
Rjuju vous avez mis des barres de concatenation pour le paramétre oid passé a la fonction pg_get_indexdef ainsi que des guillemets, est ce bien utile ? il s'agit ici d'une valeur int. J'ai tésté également: même erreur. Si vous avez d'autres idées ^^
Merci rjuju,
J'avai mis de côté cette problématique la semaine derniére, j'y reviens aujourd'hui:
CREATE OR REPLACE FUNCTION recup_index()
RETURNS void
AS $BODY$
DECLARE
test CURSOR FOR SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
oid int;
BEGIN
oid := 0;
for oid in test loop
COPY (SELECT pg_get_indexdef(oid)) TO '\xxxxxxxx\test2.copy';
end loop;
return;
end;
$BODY$
LANGUAGE plpgsql;
Suis je bien sur la bonne piste ? j'ai toujours une erreur:
opsnetv3=> \i recupindex.sql
psql:recupindex.sql:15: ERROR: syntax error at or near "$1"
LINE 1: $1
^
QUERY: $1
CONTEXT: SQL statement in PL/PgSQL function "recup_index" near line 6
Merci encore.
CREATE OR REPLACE FUNCTION recup_index()
RETURNS varchar AS '
DECLARE
test CURSOR IS SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
oid int;
oidfinal varchar;
BEGIN
oid=0;
for oid in test loop
COPY (SELECT pg_get_indexdef(oid)) TO '/home/xxxxx/test2.copy';
end loop;
return oidfinal;
end;'
LANGUAGE plpgsql;
ça ne passe toujours pas:
ERROR: syntax error at or near "/"
LINE 10: COPY (SELECT pg_get_indexdef(oid)) TO '/home/xxxxx...
^
J'ai tenté avec des parenthéses, des slashs et même des guillemets ... rien a faire. Avec des guillemets j'obtiens l'erreur suivante:
ERROR: syntax error at or near "$1"
LINE 1: $1
^
QUERY: $1
CONTEXT: SQL statement in PL/PgSQL function "recup_index" near line 7
Toujours aussi peu explicite.
CREATE OR REPLACE FUNCTION recup_index()
RETURNS varchar AS '
DECLARE
test CURSOR IS SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
oid int;
oidfinal varchar;
BEGIN
oid=0;
for oid in test loop
select pg_get_indexdef(oid) into oidfinal;
return oidfinal;
end loop;
end;'
LANGUAGE plpgsql;
Je ne comprend pas alors l'interet du curseur qui est de normalement ici récupérer l'ensemble des lignes qui m'interesse, ici je fais le return dans la boucle for. J'aimerai l'afficher et le récupére ensuite dans un fichier, n'y a t'il pas sous postgre une fonction pour afficher chaque ligne qui tour a tour sont récupérés dans la variable oidfinal ?
L'utilisation d'un tableau vous parait alors indispensable pour faire ce que je désire ?
Merci.
CREATE OR REPLACE FUNCTION recup_index()
RETURNS oidfinal AS '
DECLARE
test CURSOR IS SELECT attrelid from pg_attribute where attrelid in (select oid from pg_class where relname in (select indexname from pg_indexes));
oid int;
oidfinal varchar;
BEGIN
oid=0;
for oid in test loop
select pg_get_indexdef(oid) into oidfinal;
end loop;
RETURN;
end;'
oidfinal LANGUAGE plpgsql;
Voici une petite procédure PLSQL avec l'idée de pouvoir récupérer l'ensemble des ordres sql DDL des indexs, simplement cela ne fonctionne pas. J'ai essayé de m'adapter aux spécificités du PL utilisé par POSTGRE pour l'instant je ne m'en sors pas.
J'avou ne pas bien comprendre la commande suivante: oidfinal LANGUAGE plpgsql; ?
Pour pouvoir afficher le résultat ligne par ligne sur l'ecran lors du parcours du curseur j'utilisai la fonction dbms_output.put_line(oidfinal) : une idée d'une équivalence sur POSTGRE ?
J'obtiens l'erreur suivante pour le moment:
ERROR: syntax error at or near "CREATE"
LINE 14: CREATE OR REPLACE FUNCTION recup_index()
arf, une raison de plus pour pousser au dessus a passer en 9. Merci quand même.
Merci Marc,
ça va pas être mal pour récupérer les ordres des indexs je regarde de suite, par contre pour l'export sans contraintes et sans indexs c'est possible ?
Ok c'est réglé, merci. En jouant avec les paramétres du vacuum et en faisant plusieurs essais j'atteins quelque chose de vraiment stable.
Bonjour,
Aprés avoir parcouru les options de pg_dump, peut être que je me trompe; il me semble ne pas avoir vu la possibilité d'exporter juste les datas et les ordres de créations de tables sans les indexs et les contraintes ?. Est ce possible autrement ?
Même chose j'aimerai faire un script capable de récupérer les ordres de création des contraintes et des indexs. Sous oracle j'avai la possibilité de récupérer ces ordres un par un via une fonction qui s'appellai get_dll. Existe t'il un équivalent sous Postgre ?
Merci a vous pour votre aide.
Merci,
J'y jetterai un oeil au fur et a mesure.
Cordialement,
Merci,
Je n'arrive plus a reproduire le probléme, j'ai malgré tout de gros ralentissements due au vacuum (plus du double du temps d'execution normale de la requête).
Pour les locks durant toute la période ou la requête et le process vacuum s'execute je n'en ai constaté aucun. Personne n'a donc constaté des soucis similaires ?
Enfin pour la version 9 j'entend, malheureusement et pour des raisons historiques ce n'est pas l'ordre du jour.
Cordialement,
Bonjour,
Il y a t'il des outils interessants sur postgre, prise de traces avec possibilité d'interpretation dans le cadre d'audit ?, Outil d'aide au tuning sql ? , outil de sauvegarde annexe ?. Merci pour toutes vos réponses je découvre tout juste la communauté et l'outil.
Cordialement,
Bonjour,
De formation DBA Oracle et en mission sur Postgre que je découvre donc depuis peu je rencontre un phénomène qui ne me semble pas être anodin.
J'ai une requête que l'on m'a demandé d'optimiser, chose faite je me rend compte que celle ci se retrouve bloqué dés q'un process vaccum devient actif (toutes les heures). J'ai lu que vacuum si il n'est pas full ne pose pas de lock, ma requête est un select et est donc supposé ne pas en mettre non plus; néanmoins d'autres requêtes ne semblent pas reproduire le même problème.
Aussitôt le vacuum démarre (après test) aussitôt ma requête se bloque ainsi que le vaccum pour ne plus jamais répondre si l'on n'annule pas l'un ou l'autre, de plus a ce moment la j'utilise la commande Unix top je m'aperçois que le process Postgre consomme la totalité de la cpu de la machine (a ce moment la uniquement j'entend).
Je suis en version 8.2, avez vous déjà rencontré ce problème ? Si oui pouvez m'aider à le diagnostiquer et résoudre ce problème ? Merci d'avance.
Cordialement,
Pages : 1