Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 Re : Général » [RESOLU] Mise en place de Foreign Data Wrappers Oracle » 17/02/2017 20:09:22
Oui il y a un client oracle, ( instant client), sqlplus fonctionne, j ai un accès à oracle sans problème.
J ai vu dans le lien http://www.openscg.com/2016/04/how-to-i … a-wrapper/, qu il y a la notion de schéma. Est ce que ca pourrait être ca?
#27 Re : Général » [RESOLU] Mise en place de Foreign Data Wrappers Oracle » 17/02/2017 17:38:44
j'ai fait tout ça
CREATE EXTENSION oracle_fdw;
=>ok
CREATE SERVER oracle_labo FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver 'LABO')=>ok
GRANT USAGE ON FOREIGN SERVER oracle_labo TO postgres;=> ok
create user mapping for postgres
server oracle_labo
options (user '**', password '**');=>ok
j'ai créé une table dans postgres
=> ok
ensuite j'ai fait une requête
sur ma table fraichement créée
ERREUR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
DETAIL:
********** Erreur **********
ERREUR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
État SQL :HV00N#28 Re : Général » [RESOLU] Mise en place de Foreign Data Wrappers Oracle » 17/02/2017 16:21:58
Apparemment ça fonctionne, j'ai réussi à faire un create extension oracle_fdw en copiant les fichiers dans les bons dossier de Postgres.
je crains maintenant le paramétrage pour accéder à la base oracle .... je vous dis ça ....
#29 Re : Général » [RESOLU] Mise en place de Foreign Data Wrappers Oracle » 17/02/2017 15:12:23
c'est bien celui ci que j'avais vu, par contre s'il faut compiler l'extension................sais pas faire ![]()
#30 Général » [RESOLU] Mise en place de Foreign Data Wrappers Oracle » 17/02/2017 14:36:28
- damalaan
- Réponses : 25
Bonjour,
Je cherche des témoignages et éventuellement de l'aide sur la mise en place de foreign data wrappers d'une base oracle vers un postgres 9.6 (Postgres étant en environnement Windows et Oracle en Linux)
L'installation ne m'a pas l'air très simple (comme d'habitude avec oracle
).
Mais qu'en est il des performances ?
Y a t il des limitations ?
Peut on agir en dehors des select sur la table distante oracle avec postgres (update, insert, delete)?
J'ai installé un fdw avec un fichier csv de qq milliers de lignes lié à pg 9.6, les select fonctionnent bien, je trouve ça intéressant.
Ca me rappelle finalement ce qu'on peut faire avec des clients de type access ou libreoffice base avec des odbc.
Merci pour les infos.
#31 Re : PgAdmin3 » [résolu]affichage des foreign data wrapper » 06/02/2017 16:04:21
je me réponds.....
fichier / préférences a fait mon bonheur !!!
du coup je pense que je vais rester en pgadmin3, j'ai tout ce qu'il me faut !
#32 PgAdmin3 » [résolu]affichage des foreign data wrapper » 06/02/2017 15:50:28
- damalaan
- Réponses : 1
Bonjour,
J'ai créé une connexion avec file_fdw sur un fichier csv.
J'ai fait celà à l'aide de pgadmin4, mais comme celui ci m'a l'air encore bien instable (bien que son apparence soit plus actuelle) (déconnexion permanente, refuse le clic droit pour faire un select sur une table etc....), je suis repassé sous pg admin 3 v 1.22.2.
Mais sous ce dernier je n'ai pas la visibilité ni du serveur foreign data wrapper, ni de la foreign table créée.
Pourtant je peux faire une requête sans problème sur cette table, les résultats s'affichent.
Merci de vos lumières !
#33 Re : Général » Afficher les valeurs égales à 0 » 11/01/2017 10:59:17
je pense que la jointure n'est pas du bon côté
#34 Re : Général » Retourner les n dernières valeurs pour chaque catégorie » 10/01/2017 14:58:41
ça y est !
j'ai repris le select * proposé plus haut !
J'avoue que j'ai beaucoup de mal à comprendre la logique d'écriture de la requête
select *
from tbl_stat_sta a,
LATERAL (
select
*
from tbl_valeur_val b
where b.sta_id=a.sta_id
and b.val_date >'01/01/2016'
and val_esp = 1
order by b.val_date desc
limit 5) lat
order by a.sta_id, val_datele "val_esp" est un tri pour avoir les 5 dernières valeurs de val_esp=1.
J'ai fait un explain analyze pour chaque méthode, je suis convaincu que LATERAL est plus efficace !! (même si je n'ai pas tout compris)
Avec LATERAL
"Sort (cost=2354.07..2355.60 rows=610 width=121) (actual time=2.722..2.734 rows=293 loops=1)"
" Sort Key: a.sta_id, b.val_date"
" Sort Method: quicksort Memory: 82kB"
" -> Nested Loop (cost=0.42..2325.85 rows=610 width=121) (actual time=0.074..2.125 rows=293 loops=1)"
" -> Seq Scan on tbl_stat_sta a (cost=0.00..3.22 rows=122 width=96) (actual time=0.016..0.036 rows=76 loops=1)"
" -> Limit (cost=0.42..18.94 rows=5 width=25) (actual time=0.022..0.025 rows=4 loops=76)"
" -> Index Scan Backward using contrainte_unique on tbl_valeur_val b (cost=0.42..633.82 rows=171 width=25) (actual time=0.022..0.024 rows=4 loops=76)"
" Index Cond: ((sta_id = a.sta_id) AND (val_date > '2016-01-01'::date) AND (val_esp = 1))"
"Planning time: 0.619 ms"
"Execution time: 2.935 ms"avec RANK() OVER (PARTITION BY.....)
"Sort (cost=3727.75..3738.60 rows=4339 width=30) (actual time=43.054..43.062 rows=293 loops=1)"
" Sort Key: a.sta_id, a.val_date"
" Sort Method: quicksort Memory: 47kB"
" CTE a"
" -> WindowAgg (cost=2912.34..3172.70 rows=13018 width=13) (actual time=30.148..37.962 rows=13641 loops=1)"
" -> Sort (cost=2912.34..2944.89 rows=13018 width=13) (actual time=30.140..30.749 rows=13641 loops=1)"
" Sort Key: tbl_valeur_val.sta_id, tbl_valeur_val.val_date DESC"
" Sort Method: quicksort Memory: 1024kB"
" -> Seq Scan on tbl_valeur_val (cost=0.00..2022.68 rows=13018 width=13) (actual time=0.026..20.530 rows=13641 loops=1)"
" Filter: ((val_date > '2016-01-01'::date) AND (val_esp = 1))"
" Rows Removed by Filter: 71781"
" -> CTE Scan on a (cost=0.00..292.90 rows=4339 width=30) (actual time=30.155..42.950 rows=293 loops=1)"
" Filter: (rang <= 5)"
" Rows Removed by Filter: 13348"
"Planning time: 0.433 ms"
"Execution time: 43.467 ms"#35 Re : Général » Retourner les n dernières valeurs pour chaque catégorie » 10/01/2017 09:52:22
La table qui m’intéresse a la structure suivante :
CREATE TABLE public.tbl_valeur_val
(
val_id bigint NOT NULL DEFAULT nextval('tbl_valeur_val_val_id_seq'::regclass),
sta_id integer NOT NULL,
val_date date NOT NULL,
val_esp integer NOT NULL,
val_valeur numeric(9,3),
CONSTRAINT tbl_valeur_val_pkey PRIMARY KEY (val_id),
CONSTRAINT tbl_valeur_val_sta_id_fkey FOREIGN KEY (sta_id)
REFERENCES public.tbl_stat_sta (sta_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT contrainte_unique UNIQUE (sta_id, val_date, val_esp)
)sta_id étant le champ categorie de l'exemple
J'ai essayé avec cette requete mais j'ai un retour de 382000 lignes au lieu de 380 !
select a.sta_id, a.val_date, a.val_valeur
from tbl_valeur_val a,
LATERAL (
select
b.sta_id
from tbl_valeur_val b
where b.sta_id=a.sta_id
and b.val_date >'01/01/2016'
and val_esp = 1
order by b.val_date desc
limit 5) lat
order by a.sta_id, a.val_date#36 Re : Général » Retourner les n dernières valeurs pour chaque catégorie » 09/01/2017 16:12:27
Votre solution m’intéresse également mais je n'arrive pas à reproduire la requête avec la fonction LATERAL
Est-ce que vous pourriez me montrer la requête complète?
#37 Re : Général » Retourner les n dernières valeurs pour chaque catégorie » 09/01/2017 15:25:45
Je suis en 9.5.
Je ne connais pas LATERAL, et la doc ne m'a pas inspiré.....:-(
J'ai persisté avec une fonction de fenêtrage, et ça a l'air d'être concluant :
WITH a as (
select
categorie,
val_date,
valeur,
rank () OVER (PARTITION BY categorie order by val_date desc) as rang
from tbl_valeur_val where val_date >'01/01/2016')
select * from a where rang <=5 order by a.categorie, a.val_dateSi on peut le faire autrement, je suis intéressé également
#38 Général » Retourner les n dernières valeurs pour chaque catégorie » 09/01/2017 15:02:06
- damalaan
- Réponses : 9
Bonjour,
Voici un exemple de données dont je voudrais récupérer les 5 valeurs les plus récentes pour chaque catégorie (sans se baser sur la date, car je n'ai pas de valeur systématiquement pour chaque catégorie et chaque jour)
catégorie;date;valeur
1;"2016-12-26";0.000
1;"2016-12-27";1.000
1;"2016-12-28";23.000
1;"2016-12-29";11.000
1;"2016-12-30";2.000
1;"2017-01-03";824.000
1;"2017-01-04";803.000
1;"2017-01-05";669.000
1;"2017-01-07";204.000
2;"2016-12-27";25.000
2;"2016-12-28";30.000
2;"2016-12-29";29.000
2;"2016-12-30";18.000
2;"2017-01-03";21.000
2;"2017-01-04";26.000
2;"2017-01-05";20.000
2;"2017-01-06";20.000
3;"2016-12-27";25.000
3;"2016-12-28";14.000
3;"2016-12-29";18.000
3;"2016-12-30";18.000
3;"2017-01-03";11.000
3;"2017-01-04";11.000
3;"2017-01-05";10.000
3;"2017-01-06";9.000
3;"2017-01-07";10.000je veux obtenir ça
1;"2016-12-30";2.000
1;"2017-01-03";824.000
1;"2017-01-04";803.000
1;"2017-01-05";669.000
1;"2017-01-07";204.000
2;"2016-12-30";18.000
2;"2017-01-03";21.000
2;"2017-01-04";26.000
2;"2017-01-05";20.000
2;"2017-01-06";20.000
3;"2017-01-03";11.000
3;"2017-01-04";11.000
3;"2017-01-05";10.000
3;"2017-01-06";9.000
3;"2017-01-07";10.000je pensais passer par une window function mais je n'arrive pas à voir comment !
#39 Re : Général » [résolu]-Comparaison de chaine de caractère » 07/11/2016 09:29:11
Je mets ça sous le coude, pour le moment j'ai fait simple en triant systématiquement la sous-requete qui sert à créer la chaine de caractère string_agg, n'étant qu'à l'étape de réflexion du projet, ça fera l'affaire !
select string_agg(t.pln_analyse,'') into lot from (
select pln_analyse from tbl_planif_pln
where
pln_producteur = substring(producteur from 7 for 5)::int
and current_date between pln_datedebut and pln_datefin order by pln_analyse) t;#40 Général » [résolu]-Comparaison de chaine de caractère » 04/11/2016 12:12:37
- damalaan
- Réponses : 2
Bonjour
Je cherche à faire une comparaison un peu particulière de chaine de caractères.
Une interrogation de la base me renvoie par exemple BIC (que j'ai associé dans une table à une valeur 1), et je veux que le système comprenne que c'est la même que ICB ou CBI ou IBC ou CIB ou BCI et qu'il me renvoie donc la valeur 1.
J'ai pensé faire une association dans une table de toutes les combinaisons possibles, mais je vais avoir des chaines jusqu'à 7 caractères ....., je préfére donc trouver une solution plus propre (à base de regex peut être)
merci de vos bonnes idées !
#41 Re : Général » [Resolu] generate_series pour un retour sur tous les mois » 09/09/2016 16:30:39
nickel
merci!
#42 Re : Général » [Resolu] generate_series pour un retour sur tous les mois » 09/09/2016 14:42:58
j'ai identifié le problème
j'ai rajouté le coalesce pour forcer les valeurs à 0, mais en fait il me manque les années :
2015;1;72.000
2015;2;73.000
2015;3;39.000
2015;4;5.000
2015;7;1.000
2015;9;4.000
2015;10;16.000
2015;11;17.000
2015;12;37.000
;5;0
;6;0
;8;0#43 Général » [Resolu] generate_series pour un retour sur tous les mois » 09/09/2016 13:21:08
- damalaan
- Réponses : 4
Bonjour
je veux obtenir avec la requete ci dessous des stats par mois et par an, et si le mois n'existe pas (pas d'activité) il faut que ça affiche 0 ou null
par exemple je veux
2014 1 25
2014 2 0
2014 3 23
2014 4 65
2014 5 0
etc
or actuellement j'ai ce résultat
2014 1 25
2014 3 23
2014 4 65
j'ai essayé avec une jointure left mais je dois rater qqc !
with a as (
select generate_series(1,12) as mois),
b as (
select
date_part('year', val_date)::integer as annee,
date_part('Month', val_date)::integer as mois,
sum(val_valeur)as moyenne
from (tbl_analyse_ana natural join tbl_stat_sta natural join tbl_valeur_val)
where val_esp=2
and ana_id =4
and sta_id=61
and date_part('year', val_date) between 2014 and 2016
group by date_part('year', val_date) ,date_part('Month', val_date)
order by date_part('year', val_date), date_part('Month', val_date))
select b.annee,a.mois,b.moyenne from a left join b on a.mois=b.mois
order by b.annee, a.mois#44 Re : Général » [Résol]Calculer le nombre de km parcourus entre deux relevés compteurs » 05/08/2016 08:21:25
Je reste émerveillé devant cette requête qui fourni un élément calculé.
Je reste émerveillé devant tant d'émerveillement !!
C'est le genre de remerciement qui fait plaisir à lire !
Ce genre de requête fait appel aux fonctions de fenêtrage (window) dont la doc est ici :
http://docs.postgresql.fr/9.4/functions-window.html
C'est d'ailleurs sur ce forum, il y a quelques années qu'elles m'ont été données.
Ce n'est pas forcément évident à comprendre et à assimiler, mais ça rend des services! C'est plus efficace qu'un curseur sur les fortes volumétries.
Je dois dire qu'à chaque fois que je les utilise je me remets dans la doc, en même temps n'étant pas informaticien, je ne fais pas ça tous les jours !
#45 Re : Général » [Résol]Calculer le nombre de km parcourus entre deux relevés compteurs » 04/08/2016 14:37:11
bonjour,
Est-ce vraiment utile de stocker un élément calculé ?
Si ce n'est pas le cas, pourquoi ne pas utiliser ce genre de chose :
SELECT "date", releve,
releve - lag(releve, 1) OVER (PARTITION BY 1 ORDER BY "date") as parcouru
FROMcomptage
ORDER BY "date"pour obtenir ça
date;relevé;parcouru
"2001-01-01";2;
"2015-12-22";7;5
"2016-09-22";10;3et du coup plus besoin de la colonne parcouru dans la table.
#46 Re : Général » Fichier CSV en UTF8 » 23/06/2015 14:40:38
essaie ça juste avant l'import
SET client_encoding TO 'LATIN1';#47 Re : Général » Connexion à distance Postgresql » 20/05/2015 16:26:01
Bonjour
Est-ce que le port 5432 est ouvert?
#48 Re : Général » SQL : Convertir numéro du jour dans la semaine en texte » 29/04/2015 14:38:57
Tu n'as pas la possibilité de récupérer la date directement ?
Sinon, tu peux soit monter une table avec la correspondance 1=lundi, 2=mardi.... ou utiliser une série de case when
Effectivement en cherchant un peu je n'ai pas trouvé de réponse plus simple (ce qui ne veut pas dire qu'il n'y en a pas!)
#49 Re : Général » SQL : Convertir numéro du jour dans la semaine en texte » 29/04/2015 14:02:49
Bonjour
Il y a tout ce qu'il faut là :
http://docs.postgresql.fr/9.3/functions-formatting.html
select to_char(current_timestamp, 'TMday');#50 Re : Général » COPY FROM erreur 22P02 » 22/04/2015 16:45:17
je pense qu'il faut préciser que tu as des entêtes, ainsi que le delimiteur
COPY tbl_import FROM 'c:/moncsv.csv' WITH CSV HEADER DELIMITER ';'