Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Voici quelques souvenirs de l'époque où je m'étais posé quelques questions sur le portage de Pro*Cobol/Oracle vers du Microfocus Cobol/ PostgreSQL. Ceci dit, cela fait déjà quelques années... et les produits ont pu évoluer.
Le compilateur « Visual COBOL » de la société Micro-Focus dispose de plusieurs pré-compilateurs permettant de gérer du « embbeded SQL » dans du code COBOL. C’est le cas du pré-compilateur OpenESQL qui traduit le SQL en appel à la bibliothèque ODBC/JDBC. Le pilote ODBC/JDBC pour PostgreSQL établit la communication avec une base PostgreSQL. (J'avais utilisé ODBC car JDBC est plus contraignant. J'étais aussi sous Linux.)
Malheureusement, le lien sur la documentation d'OpenESQL que j'avais noté semble être obsolète. (http://documentation.microfocus.com/hel … BESQL.html)
Les ordres SQL sont délimités par EXEC SQL et END-EXEC.
A noter que Le préprocesseur OpenESQL est plus strict au niveau de la syntaxe que le pré-compilateur Pro*COBOL. Cela s’explique par le fait que la couche ODBC utilisée par OpenESQL est moins permissive qu’Oracle au niveau de la syntaxe.
OpenESQL a des directives (tracelevel,behaviour et autres ) qui permettent d'influer sur son comportement.
Bref, peut être qu'une recherche Web sur OpenESQL pourrait t'aider. (... https://www.microfocus.com/documentatio … BESQL.html ...)
De plus, il existe peut être d'autres solutions qu'OpenESQL.
Voilà.
Bien cordialement,
Jean-Pierre
J'ai crée le bug suivant : 872660 ( https://bugs.debian.org/cgi-bin/bugrepo … bug=872660 )
Statut : en cours, confirmé ...
A suivre.
Merci.
Bien cordialement,
Merci pour cette confirmation rapide.
Bien cordialement,
Bonjour,
Version: PostgreSQL 10beta3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 7.1.0-13) 7.1.0, 64-bit
Je crée un cluster par la commande :
pg_createcluster \
pg_createcluster \
-d /PG_02_01/data \
--locale fr_FR.iso885915@euro \
--lc-collate C \
--lc-ctype C \
-e LATIN9 \
10 MONCLUSTER \
-- --waldir=/PG_03_01 \
--data-checksums
Jusque-là tout va bien. Le message suivant est affiché :
Succès. Vous pouvez maintenant lancer le serveur de bases de données en utilisant :
/usr/lib/postgresql/10/bin/pg_ctl -D /PG_02_01/data -l fichier de trace start
Warning: systemd does not know about the new cluster yet. Operations like "service postgresql start" will not handle it. To fix, run:
sudo systemctl daemon-reload
Ver Cluster Port Status Owner Data directory Log file
10 MONCLUSTER 5432 down postgres /PG_02_01/data /var/log/postgresql/postgresql-10-MONCLUSTER.log
Par contre, si je fais comme le message me le suggère :
/usr/lib/postgresql/10/bin/pg_ctl -D /PG_02_01/data start
J'ai le message d'erreur :
en attente du démarrage du serveur....postgres : n'a pas pu accéder au fichier de configuration « /PG_02_01/data/postgresql.conf » : Aucun fichier ou dossier de ce type
attente arrêtée
pg_ctl : n'a pas pu démarrer le serveur
Examinez le journal applicatif.
Ce qui me parait s'expliquer par le fait que sous Debian le fichier postgresql.conf est sous :
:~$ ls /etc/postgresql/10/MONCLUSTER/postgresql.conf
/etc/postgresql/10/MONCLUSTER/postgresql.conf
Mon instance démarre correctement avec :
/usr/lib/postgresql/10/bin/pg_ctl -D /etc/postgresql/10/MONCLUSTER/ start
en attente du démarrage du serveur....2017-08-11 19:34:13.106 CEST [11868] LOG: en écoute sur IPv6, adresse « ::1 », port 5432
2017-08-11 19:34:13.106 CEST [11868] LOG: en écoute sur IPv4, adresse « 127.0.0.1 », port 5432
2017-08-11 19:34:13.108 CEST [11868] LOG: écoute sur la socket Unix « /var/run/postgresql/.s.PGSQL.5432 »
2017-08-11 19:34:13.122 CEST [11869] LOG: le système de bases de données a été arrêté à 2017-08-11 19:32:16 CEST
2017-08-11 19:34:13.128 CEST [11868] LOG: le système de bases de données est prêt pour accepter les connexions
effectué
serveur démarré
Ai-je fait une erreur quelque part ? Ou bien, faut-il faire modifier le message affiché par pg_createcluster ?
Merci beaucoup pour votre aide.
Merci beaucoup pour cette réponse.
Je contacte Devrim.
Bien cordialement,
Jean-Pierre
Bonjour,
Je cherche à installer la version 09.06.0200 du package psqlODBC sur une Red Hat 6.8.
Malheureusement cette version n'a pas l'air disponible à partir du repository Pgdg .
(
Ce package a pu être installé sur une Debian Jessie. # apt-cache madison odbc-postgresql
odbc-postgresql | 1:09.06.0200-1.pgdg80+1 | http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg/main amd64 Packages
)
Savez-vous quand le repository Pgdg sera à jour pour Redhat ? (le package semble aussi être absent pour Redhat 7.)
Y'a t'il souvent des décalages de ce type ?
Merci beaucoup pour votre aide.
Bonjour,
Je suis à la recherche de retour d'expériences sur l'utilisation de programme Cobol accédant à une base PostgreSQL, le tout s'éxécutant sur une machine Linux.
- Il ne semble pas exister de pré-compilateur SQL pour Cobol présent dans la distribution PostgreSQL en natif. ( L'équivalent du pre-compilateur PRO*COBOL sous Oracle.)
- Sous https://github.com/tollofsen/ocesql, on trouve existe un pré-compilateur open source. (Open Cobol ESQL (ocesql) is an open-source Embedded SQL pre-compiler and run-time library designed for COBOL applications which access an open-source database.) qui semble fonctionner.
- Odbc pourrait également être une piste. voir https://www.postgresql.org/message-id/2 … hus.com.au
Peut être avez-vous trouver d'autres solutions ?
Merci de partager votre expèrience sur ce sujet.
Cordialement,
Jean-Pierre
Bonjour,
Le mieux, me semble t'il pour obtenir de l'aide serait de créer une nouvelle discussion en donnant plus d'information sur votre souci d'installation. Pour information, "Aboudra" a résolu son incident en désactivant son antivirus pendant l'installation comme indiqué dans la discussion: http://forums.postgresql.fr/viewtopic.php?id=3797.
Cordialement,
Jean-Pierre
Bonjour,
Que se passe t'il si vous modifier votre script shell comme suit ?
----------------------
LD_LIBRARY_PATH=/opt/sas/sashome/SASWebInfrastructurePlatformDataServer/9.4/lib
export LD_LIBRARY_PATH
PGPASSWORD=*******
export PGPASSWORD
/opt/sas/sashome/SASWebInfrastructurePlatformDataServer/9.4/bin/psql -U mysuser -h localhost -p 6432 -d myDatabase <<EOF!
select * from sas_audit;
\q
EOF!
-----------------
( rajout de <<EOF! et EOF! )
Bien cordialement,
Jean-Pierre
Bonjour,
Est il possible de récupérer une trace pour analyser ce qui se passe ? Par exemple, en utilisant pg_trace() ? ( voir http://php.net/manual/fr/function.pg-trace.php pour plus de détails ) (Je pars du principe que la communication se passe entre du PHP et PostgreSQL à cause de la présence de pg_connect() dans le message d'erreur. Peut-être n'est pas vrai ... )
Il me semble que cela donnerait plus d'information et permettrait peut être de mieux comprendre.
Bien Cordialement,
Merci beaucoup pour retour.
Bien Cordialement,
Très content si j'ai pu aider.
Si le résultat doit être uniquement :
id | typid | count
----+-------+--------
1 | 8 | 3
"Ma requête" doit être modifier comme suit :
___________________________________________
SELECT id, typid,count(typid) Nb
FROM ( SELECT t1.id, t1.typid, t1.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
WHERE t3.id IS NULL
UNION
SELECT t1.id, t1.typid, t2.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
WHERE t3.id IS NULL ) AS EventNb
GROUP BY id, typid ;
_________________________________________
La solution de Julien est certainement meilleure du point de vue des performances. Elle est également beaucoup plus concise.
Bon développement.
Bien Cordialement
Bonjour Martina,
Est que le solution suivante pourrait vous convenir ?
Table test de départ :
======================
postgres=# SELECT * FROM test ;
id | typid | datid
----+-------+------------------------
1 | 3 | 2015-03-01 13:12:21+01
2 | 7 | 2015-03-01 13:12:21+01
1 | 5 | 2015-03-01 13:12:27+01 <-
4 | 4 | 2015-03-01 13:12:56+01 <--
1 | 5 | 2015-03-01 13:15:27+01 <-
1 | 8 | 2015-03-01 13:16:21+01 <---
1 | 8 | 2015-03-01 13:16:22+01 <---
1 | 8 | 2015-03-01 13:17:21+01 <---
1 | 5 | 2015-03-01 13:17:27+01
1 | 3 | 2015-03-01 13:18:21+01
4 | 4 | 2015-03-01 13:19:56+01 <--
(11 lignes)
Table nb_eventconsecutifs :
==================
postgres=# SELECT * FROM nb_eventconsecutifs ;
id | nb
----+----
1 | 5
4 | 2
(2 lignes)
____________________________________________________
Ce résultat est obtenu grace à l'ordre SQL suivant :
CREATE TABLE nb_eventconsecutifs AS
SELECT id, count(typid) Nb
FROM ( SELECT t1.id, t1.typid, t1.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL
UNION
SELECT t1.id, t1.typid, t2.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL ) AS EventNb
GROUP BY id ;
Je vous laisse le soin de vérifier et de faire plus de tests pour valider (ou non) cette solution.
Je joins mes scripts de tests pour que vous puissiez les reproduire plus facilement si vous le souhaitez :
Creation de la table test:
CREATE TABLE test AS SELECT 1 id, 2 typid, current_timestamp datid FROM T where 1=0 ;
INSERT INTO test VALUES ( 1,3,'2015-03-01 13:12:21') ;
INSERT INTO test VALUES ( 2,7,'2015-03-01 13:12:21') ;
INSERT INTO test VALUES ( 1,5,'2015-03-01 13:12:27') ;
INSERT INTO test VALUES ( 4,4,'2015-03-01 13:12:56') ;
INSERT INTO test VALUES ( 1,5,'2015-03-01 13:15:27') ;
INSERT INTO test VALUES ( 1,8,'2015-03-01 13:16:21') ;
INSERT INTO test VALUES ( 1,8,'2015-03-01 13:16:22') ;
INSERT INTO test VALUES ( 1,8,'2015-03-01 13:17:21') ;
INSERT INTO test VALUES ( 1,5,'2015-03-01 13:17:27') ;
INSERT INTO test VALUES ( 1,3,'2015-03-01 13:18:21') ;
INSERT INTO test VALUES ( 4,4,'2015-03-01 13:19:56') ;
SELECT * FROM test ;
En procédant par étapes pour essayer d'expliquer :
1- L'ordre SQL suivant permet de retrouver les couples (ID,TYPE ) consécutifs sous la forme ID, TYPE, DATE_DEBUT, DATE_FIN
---------------------------------------------------------------------------------------------------------------------------------------------------
SELECT t1.id, t1.typid, t1.datid, t2.datid,t3.typid, t3.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL
ORDER BY t1.datid ;
id | typid | datid | datid | typid | datid
----+-------+------------------------+------------------------+-------+-------
1 | 5 | 2015-03-01 13:12:27+01 | 2015-03-01 13:15:27+01 | |
4 | 4 | 2015-03-01 13:12:56+01 | 2015-03-01 13:19:56+01 | |
1 | 8 | 2015-03-01 13:16:21+01 | 2015-03-01 13:16:22+01 | |
1 | 8 | 2015-03-01 13:16:22+01 | 2015-03-01 13:17:21+01 | |
(4 lignes)
2 - Pour obtenir la liste de toutes les occurences de couple (ID,TYPE) consécutifs, il faut prendre en compte le début et la fin :
-----------------------------------------------------------------------------------------------------------------------------------
SELECT t1.id, t1.typid, t1.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL
UNION
SELECT t1.id, t1.typid, t2.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL
ORDER BY 3 ;
id | typid | datid
----+-------+------------------------
1 | 5 | 2015-03-01 13:12:27+01
4 | 4 | 2015-03-01 13:12:56+01
1 | 5 | 2015-03-01 13:15:27+01
1 | 8 | 2015-03-01 13:16:21+01
1 | 8 | 2015-03-01 13:16:22+01
1 | 8 | 2015-03-01 13:17:21+01
4 | 4 | 2015-03-01 13:19:56+01
(7 lignes)
3 - Une fois obtenue la liste précedente, il faut compter le nombre de TYPE par ID :
------------------------------------------------------------------------------------
SELECT id, count(typid) Nb
FROM ( SELECT t1.id, t1.typid, t1.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL
UNION
SELECT t1.id, t1.typid, t2.datid
FROM ( test t1 INNER JOIN test t2 ON t1.id = t2.id
and t1.typid = t2.typid
and t1.datid < t2.datid )
LEFT JOIN test t3 ON t3.datid > t1.datid and t3.datid < t2.datid
and t1.id = t3.id
WHERE t3.id IS NULL ) AS EventNb
GROUP BY id ;
id | nb
----+----
1 | 5
4 | 2
(2 lignes)
Voilà, j'espère que cela sera utile.
Cordialement,
Super. Merci pour le retour.
Bien Cordialement,
Bonjour,
Pour votre installation :
Quel est le type de machine 32bits, 64bits ? ( Je suppose que le processeur est de la famille intel, x86 ou x64 )
Quelle version de Windows utilisez-vous ? (7,8,10, 32 bits, 64 bits)
A partir de quel lien avez-vous récupéré la version 9.5.2 de PostgreSQL ? Essayez-vous d'installer la version 32bits ou 64bits ?
En fonction de vos réponses, j'essaierai de faire l'installation et donc de reproduire l'incident, si j'arrive à avoir accès une configuration équivalente.
Bien cordialement,
Bonjour,
Avez-vous essayer de mettre en oeuvre la solution décrite pour un incident similaire sous http://www.postgresqltutorial.com/install-postgresql/ ? à savoir :
<<<-----
Si vous rencontrez le message d'erreur suivant pendant l'installation de PostgreSQL sous Windows (Windows 8 ou Windows 10):
" Echec lors du chargement des modules SQL dans le cluster de bases de données"
et que le message suivant apparait :
" un problème est survenu lors de l’exécution de l’étape de post installation. l 'installation peut avoir échoue. Erreur de lecture du fichier C:/Program Files(x86)/PostgresSQL/9.5/data/postgresql.conf"
Vous devez appliquer les points suivants :
Désinstaller PostgreSQL et supprimer le répertoire data dans le répertoire d'installation.
Créer le nouvel utilisateur Windows postgres et ajouter le au groupe Administrateurs.
Redémarrer votre machine.
Ouvrer un fenêtre DOS (cmd), lancer la commande suivante : runas /user:postgres cmd.exe
Une nouvelle fenêtre apparait, il vous faut lancer le programme d'installation à partir de cette fenêtre.
------>>>>
N'ayant pas de machine sous windos 8 ou 10, je n'ai pas pu tester cette solution mais les symptômes ayant l'air similaire, je me dis que cette solution pourrait fonctionner pour vous.
Bien Cordialement,
Pages : 1