Vous n'êtes pas identifié(e).
J'ai trouvé !
j'écris le select d'appel à la fonction avec un AS et sans ; à la fin puis j'écris \gset
SELECT mafonction( ... ) AS acacher
\gest
C'est parfait !
Jean
aucune des propositions fonctionne !!!
merci quand même !!
Jean
Bonjour,
j'ai un petit souci d'affichage avec psql : quand j'appelle une fonction retournant void, il m'affiche sur l'écran une ligne contenant le nom de la fonction, une ligne pour les tirets du soulignement, une ligne blanche et enfin une ligne contenant '(1 ligne)'.
On peut supprimer cet affichage ?
En fait je ne voudrais voir à l'écran que les résultats de \echo et les messages d'erreur ....
Merci d'avance
Jean
C'était ce qu'il me manquait et j'aurais du le savoir !!
Merci pour cette réponse rapide.
Jean
Bonjour,
existe-t-il une possibilité de faire une boucle de traitement dans psql ?
un exemple : je voudrais créer d'un seul coup les 12 tables filles correspondant à une partition
Dans le même ordre d 'idée, est-il possible de parcourir les résultats d'une requête ? c'est à dire faire un traitement sur la ligne 1, puis sur la ligne suivante ... jusqu'à la dernière ligne ?
Bien cordialement,
Jean
>Sinon peut être en choisissant un clic droit sur la base de données cible pour ouvrir une nouvelle fenêtre de requête SQL ?
BINGO !
merci beaucoup
Jean
Bonjour,
je suis en train de développer une base de données 'toto'. Donc dans Pgadmin4 j'ai bien 2 bases : postgres et toto. Sur le clic-droit de toto, j'ai la ligne 'se déconnecter' et pas sur la base Postgres.
Mais si je fais une requête sur les tables ou les vues systèmes (par exemple pg_indexes), cette requête se fait sur la base postgres.
Il y a un moyen de spécifier que je veux travailler sur la base toto ?
Merci d'avance
Jean
Merci pour les liens. Je pense que ce week-end je vais avoir du boulot !!!
Bien cordialement,
Jean
rebonjour,
en lisant attentivement la documentation d'oracle_fdw, j'ai une inquiétude : faut-il qu'Oracle soit installé (ou accessible) pour pourvoir installer l'extension oracle_fdw ?
Bien cordialement
Jean
Bonjour,
C:/postgrew/pg10/lib/oracle_fdw.dll existe.
lisible par l'utilisateur faisant tourner le service postgres ? je le vérifie ...
Cela pourrait également être du à un anti virus. Si c'est çà, on n'est pas sorti de l'auberge, je n'ai aucun droit pour modifier le système, l'anti-virus, etc ...
merci pour ces suggestions.
Jean
Je n'arrive pas à installer l'extension !
J'ai copié les fichiers .control et .sql dans le répertoire share\extensions
J'ai copié le fichier oracle_fdw.dll dans le répertoire lib
De retour dans PgAdmin, j'ai fait 'refresh' sur la base de données. Puis clic-droit sur extensions, create; j'ai bien trouvé oracle_fdw dans la liste. Je le sélectionne, puis 'save'.
J'ai alors cette erreur : ERREUR: n'a pas pu charger la bibliothèque « C:/postgrew/pg10/lib/oracle_fdw.dll » : unknown error 126
Que peut-il se passer ?
Cordialement,
Jean
Merci.
C'est donc encore plus simple que je ne le pensai ! J'essaie de mettre cela en place et je reviens ici en cas de problème !
Encore merci
Jean
Bonjour à tous,
je dois créer une base postgre qui va être remplie regulièrement par des données présentes dans une base Oracle. Est-ce que vous pourriez me donner les premiers pas (les informations de base) ?
Le plus simple pour moi serait de pouvoir envoyer des requêtes SQL (vues ?) à Oracle et de récupérer les résultats (parce que je n'ai pas le droit de toucher à Oracle). A priori pour cela il faudrait un foreign data wrapper et il y en a un sur https://github.com/laurenz/oracle_fdw. Comment cela fonctionne-t-il ?
Merci d'avance
Jean
Bonjour Marc,
avec la syntaxe
ctableau constant int[3]:= array[X'00000001', X'00000002', X'0000000F']::int[];
tout fonctionne !
Cela m'a permis de 'résoudre' un autre 'bug' ailleurs : si j'affiche les valeurs de ctableau dans un RAISE NOTICE, j'obtiens bien 1, 2 et 15. Mais si j'enlève le ::int[] à la fin de la ligne, le même RAISE donne 1, 10, 1111 ce qui représente la chaine de bit mais dans un nombre entier !! Si j'affiche 2 * ctableau[3], j'obtiens 2222 !!!!
Merci beaucoup pour ton aide.
Jean à Grenoble
Bonsoir,
je voudrais initialiser un tableau avec les 32 premières puissances de 2. Si je ne prend que les 3 premières, je peux écrire :
ctableau constant integer ARRAY[3] := '{1, 2, 4}';
Cela fonctionne. Mais cela devient un peu compliqué avec les grandes valeurs et pour être plus lisible, je voudrais écrire les constantes en hexadécimal. Quelquechose comme :
ctableau constant integer ARRAY[3] := '{X'00000001', X'00000002', X'00000004'}';
Je crois avoir essayé toutes les écritures possibles mais soit j'ai une erreur de syntaxe soit c'est à l'execution que j'ai une erreur.
Est-ce que vous auriez une idée ?
Par contre, la déclaration d'une variable simple fonctionne :
toto constant integer := X'00000004';
Merci d'avance !
Jean à Grenoble
Bonsoir,
j'ai mis un peu de temps à revenir à Postgre ! Merci pour votre réponse qui m'ouvre plein d'horizons. Je suis juste un peu inquiet sur le temps de réponse (j'ai énormément de calculs binaires) mais pour l'instant cela me convient ..
Merci encore
Jean à Grenoble
Bonjour à tous,
je prépare la conversion d'une base Visual Foxpro vers Postgre. Dans pratiquement toutes mes tables, j'ai un champ 'bits' de type integer dans lequel je peux traiter facilement chaque bit individuellement (VFP à toutes les fonctions pour celà). Ce champ contient donc, fonctionnellement, 32 bits; chacun ayant sa propre signification.
Comme je voudrai pouvoir aussi accéder aux tables transférées sous Postgre en PL/pgSQL je cherche le meilleur type de données correspondant à ces 32 bits sous Postgre.
L'ideal serait INTEGER (cela simplifierait mes vues distantes sous VFP) mais a-t-on les fonctions pouvant sélectionner ou mettre à jour un bit dans un INTEGER (est-ce que les fonctions get_bit et set_bit fonctionneraient avec un INTEGER ?)
Sinon, je n'ai pas bien compris la différence entre les chaines de bits et le type bytea ...
Bonne fin de week-end à tous
Jean à Grenoble
merci beaucoup.
Jean
Notre base de données recueille tous les quarts d'heure un grand nombre d'informations provenant d'automatismes divers. Nous gardons les détails pendant plusieurs mois mais pour les mois anciens nous calculons des statistiques sur ce mois que nous insérons dans la même table que les détails puis nous effaçons les lignes de détail correspondantes. Nous avions une application qui durait 1 heure, nous voulons la remplacer par une seule requête SQL qui dans nos tests ne met que 57 secondes.
Dans le WITH de cette requète, nous calculons une table temporaire, effectuons le DELETE des lignes, ce DELETE ayant un RETURNING *, nous faisons les statistiques sur ce retour. C'est parfait.
Nous n'avons pas de problème d'accès concurrentiel.
Mais que se passerait-il si le serveur tombait en panne durant la requête ? Faut-il entourer la requête par une transaction ou existe-t-il une sorte de transaction automatique pour chaque requete ? Nous nous posons la question parce que l'application faisait les statistiques avant d'effacer les lignes et là la requête efface les lignes avant de faire les statistiques.
La requete en question ressemble à ceci :
WITH -- recherche les triplets equipement_id,statistique_id,jour à aggréger
lignes_a_utiliser AS
(
SELECT equipement_id, statistique_id, horodatage::date AS jour FROM statistique_resultat
GROUP BY 1,2,3
HAVING count(*)>1
),
lignesaggregat AS
( -- supprime toutes les vieilles lignes correspondant aux triplets trouvés
DELETE FROM statistique_resultat sr WHERE sr.horodatage<'2016-06-07' AND
EXISTS(SELECT * FROM lignes_a_utiliser lu WHERE
lu.equipement_id=sr.equipement_id AND
lu.statistique_id=sr.statistique_id AND
lu.jour=sr.horodatage::date)
RETURNING *
)
-- Enfin, crée un enregistrement unique pour le triplet en calculant moyennes, sommes, max...
INSERT INTO statistique_resultat
SELECT
nextval('statistique_result_seq') AS id,
equipement_id,
statistique_id,
avg(valeur) AS valeur,
...
sum(nb_un) AS nb_un
FROM lignesaggregat
GROUP BY equipement_id,statistique_id,horodatage::date;
Qu'en pensez-vous ?
Jean
Bonsoir,
en fait on a eu un problème avec la commande EXECUTE. L'aide en PDF n'est pas très explicite et nous avons fait une erreur qui nous a fait croire qu'EXECUTE ne fonctionnait pas. L'aide HTML semble beaucoup plus détaillée et la commande fonctionne bien.
Nous pouvons créer toutes les tables nécessaires à notre partionnement d'une manière automatique ! Et nous avons même pu résoudre d'autres problèmes !!
Merci !
Jean à Grenoble
Bonsoir,
je voudrais mettre en place un partitionnement sur une grosse table (50 millions de lignes) basé sur l'année et le mois. Il faut donc que je crée toute une série de tables 'fille' du type
mesure_2018_01
mesure_2018_02
etc
J'aimerai pouvoir faire un script ou une fonction qui le fasse automatiquement pour une année. Je veux bien créer 12 Create pour une année dans la fonction mais est-il possible de passer '2018' en parametre ?
Merci d'avance
Jean à Grenoble
Bonjour à tous,
je suis en train de migrer une base sous Visual Foxpro (VFP) vers PostGre. Dans plusieurs tables, j'ai des champs date vides (par exemple la date de livraison n'est pas encore connue ...).
Y-a-t-il une constante 'date vide' sous PostGre (sous VFP on a {//} ) ?
D'avance merci
Jean
Bonjour ioguix,
je ne migre pas l'application mais juste les données. VFP étant un excellent outil, je conserve tout l'applicatif. Par contre je copie les données des .dbf vers une base PostGre car VFP est un excellent client SQL.
J'ai quelques soucis car VFP autorise beaucoup de choses que PostGre n'accepte pas.
Il ne devrait donc pas avoir de régression, juste une petite baisse de la vitesse d'execution (qui reste imperceptible !).
Bonne fin de journée
Jean
Merci !
Du coup, j'ai découvert plein de choses en interrogeant pg_catalog ...
Bonne fin de dimanche
Jean
Bonjour à tous,
je dois mettre à jour une base de données sous Postgre à partir d'une base de données sous ... Visual Foxpro (non, il n'est pas mort !!) dans laquelle on peut ajouter une table, ajouter une colonne dans une table, etc. Sous PostGre, comment savoir si une table existe, si une colonne existe ?
D'avance merci
Jean