Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#151 Général » Calcul matriciel » 27/07/2011 13:53:33
- damalaan
- Réponses : 1
Bonjour,
Je me pose la question suivante : existe t il des fonctions de calculs matriciel sous PGSQL?
Je voudrais par exemple calculer le déterminant d'une matrice carrée (3*3)
Merci
#152 Re : Général » Fonction substring » 29/06/2011 16:24:16
je suis en version 9.0, avec pgAdminIII
ce qui est étrange c'est j'utilise cette fonction dans une fonction en PL/pgSQL et qu'elle n'est pas entre guillemet
ça n'empêche pas que cela fonctionne mais c'est étrange
SELECT
to_number((
(substring(annnee,3,2) ||
(case CHAR_LENGTH(mois)
when 1 then '0'||mois
when 2 then mois
end)
|| decade)), '999999') as date_prel,
......#153 Général » Fonction substring » 29/06/2011 10:08:51
- damalaan
- Réponses : 3
Bonjour,
j'ai créé la vue vue
CREATE OR REPLACE VIEW view_moy_labo AS
SELECT view_ecart_type_tournee.trn_esp, to_number("substring"(to_char(view_ecart_type_tournee.trn_date_prel, 'FM999999'::text), 1, 4), '9999'::text) AS mois, round(avg(view_ecart_type_tournee.stddev), 2) AS et
FROM view_ecart_type_tournee
GROUP BY to_number("substring"(to_char(view_ecart_type_tournee.trn_date_prel, 'FM999999'::text), 1, 4), '9999'::text), view_ecart_type_tournee.trn_esp
ORDER BY view_ecart_type_tournee.trn_esp, to_number("substring"(to_char(view_ecart_type_tournee.trn_date_prel, 'FM999999'::text), 1, 4), '9999'::text);la fonction substring se retrouve entre guillemet et j'aimerai bien savoir pourquoi!
autre question dans la question : n'y a t il pas un autre moyen que d'utiliser substring pour récupérer une partie d'un nombre pour faire un regroupement par exemple:
110401 --> 1104
merci
#154 Re : Général » Equivalent fonction si(excel) ou vraifaux(access) » 28/06/2011 14:17:34
nickel
j'avais bien pensé à ça mais je n'avais pas bien compris la syntaxe
merci
#155 Général » Equivalent fonction si(excel) ou vraifaux(access) » 28/06/2011 14:06:35
- damalaan
- Réponses : 2
Bonjour,
Je recherche une fonction pour comparer des données du genre de celles citées dans le titre (si (champ1>champ2, vrai alors "toto", faux alors "titi"))
Est-ce que cela existe en SQL (pas trouvé) ou faut-il passé par du PL/pgSQL?
Merci
#156 Re : Général » Requete de regroupement » 22/06/2011 08:08:29
voici la requete finale :
CREATE OR REPLACE VIEW view_moy_labo2 AS
WITH t_group AS (
( ( ( ( SELECT 1 AS groupe, 100601 AS debut, 100703 AS fin
UNION ALL
SELECT 2 AS groupe, 100801 AS debut, 100903 AS fin)
UNION ALL
SELECT 3 AS groupe, 101001 AS debut, 101103 AS fin)
UNION ALL
SELECT 4 AS groupe, 101201 AS debut, 110103 AS fin)
UNION ALL
SELECT 5 AS groupe, 110201 AS debut, 110303 AS fin)
UNION ALL
SELECT 6 AS groupe, 110401 AS debut, 110503 AS fin
)
SELECT g.debut, g.fin, t.trn_esp, avg(t.stddev) AS avg
FROM view_ecart_type_tournee t
JOIN t_group g ON t.trn_date_prel >= g.debut AND t.trn_date_prel <= g.fin
GROUP BY g.debut, g.fin, t.trn_esp, g.groupe
ORDER BY t.trn_esp, g.debut;Il ne me reste plus qu'à la construire dynamiquement!
J'ai remarqué que PostgreSQL (à moins que ce soit pgAdmin) convertit le BETWEEN en >= et <= !
Merci
#157 Re : Général » Requete de regroupement » 21/06/2011 08:28:49
ah je les avais oublié ces fonctions!! elles m'ont pourtant déjà sorti de l'impasse dans cette bdd!!
mes pseudo dates sont donc au format AAMMDD, où DD est la décade donc toujours égal à 01, 02 ou 03
néanmoins je n'arrive pas à trouver un modele mathématique pour regrouper 2 mois
la logique est la suivante pour regrouper 2 mois:
101201 à 110103
110201 à 110303
110401 à 110503
110601 à 110703
etc
#158 Général » Requete de regroupement » 20/06/2011 20:53:51
- damalaan
- Réponses : 5
Bonjour,
J'ai des données qui peuvent ressembler à ça :
date;esp;trn;ecartype
110402;2;2;12
110402;2;6;14
110402;2;187;12
110401;2;44;14
110402;2;123;15
110401;2;9470;12
110403;2;37;11
110502;2;2;10
110502;2;6;18
110502;2;187;11
110501;2;44;12
110502;2;123;14
110501;2;9470;12
110503;2;37;19
Je voudrais faire la moyenne de ecartype, en regroupant sur trn et sur la date, de manière prendre en compte 2 mois consécutif (soit 1104 et 1105)
donc pour trn = 2 , la moyenne de ecartype pour la période 1104-1105 est 11.
Ici mon exemple de comprend que 2 mois, mais ma base à un historique de 3ans.
J'ai pensé à passer par des substring et des case afin de découper les dates et dire que 1104 correspond à 1105 par exemple; mais n'y a t il pas plus simple?
Merci d'avance
#159 Re : Général » Backup de toutes les bases de données à chaque nuit sous Windows » 16/06/2011 06:54:35
En fait qd je dis que je sauvegarde toutes les 4H, je garde l'historique sur une semaine, et c'est dynamique, càd qu'en fonction du jour et de l'heure, les sauvegardes vont dans un dossier créé à l'avance.
Je me suis fais des dossiers : lundi_8 (pour lundi 8h), lundi_12, lundi_16 et lundi_20, ainsi de suite jusqu'à dimanche
voici mon script, c'est un truc que j'ai longtemps cheché sur le net avant de le trouver!
REM -------- MEMORISATION ET DECOMPOSITON DE L'HEURE DE DEBUT ---------
set debut=%TIME%
set /a hd=%TIME:~0,2%*3600
set /a md=%TIME:~3,2%*60
set Sd=%TIME:~6,5%
set /a s1=hd+md+sd
REM s1= heure de début convertie en secondes
REM -------- MEMORISATION ET DECOMPOSITON DE LA DATE DU JOUR ---------
set /a J=%date:~0,2%
set /a M=%date:~3,2%
set /a A=%date:~6,2%
::Calcul du jour julien de la date saisie
set /a N=(1461 * (%A% + 4800 + (%M% - 14) / 12)) / 4 + (367 * (%M% - 2 - 12 * ((%M% - 14) / 12))) / 12 - (3 * ((%A% + 4900 + (%M% - 14) / 12) / 100)) / 4 + %J% - 32075
set N1=%N%
::Calcul numero du jour de la date saisie [Lundi = 0 ... Dimanche = 6]
set /a N%%=7
::Affectation Jours
REM -------- MEMORISATION ET DECOMPOSITON DE LA DATE DU JOUR ---------
echo %N%-
if %N%==0 set JOUR=LUNDI
if %N%==1 set JOUR=MARDI
if %N%==2 set JOUR=MERCREDI
if %N%==3 set JOUR=JEUDI
if %N%==4 set JOUR=VENDREDI
if %N%==5 set JOUR=SAMEDI
if %N%==6 set JOUR=DIMANCHE
set /a h=%time:~0,2%
REM j = jour de la sauvegarde
REM m= mois de la sauvegarde
REM a= année de la sauvegarde
REM -------- PROGRAMME DE SAUVEGARDE ---------
ECHO - SAUVEGARDE DES DONNEES VERS C:\Sauvegarde
set chemin=C^:^\Sauvegarde^\%JOUR%_%h%^\pg_dump_indext.sql
"C:\PostgreSQL\bin\pg_dump.exe" --host localhost --port 5432 --username postgres --file %chemin% Indextà adapter avec la solution de gleu pour toutes les bases du serveur
bon courage
#160 Re : Général » Backup de toutes les bases de données à chaque nuit sous Windows » 15/06/2011 12:03:36
voilà comment je procède : un .bat avec le planificateur de tache (toutes les 4h dans mon cas)
"C:\PostgreSQL\bin\pg_dump.exe" --host localhost --port 5432 --username postgres --file "C:\Sauvegarde\pg_dump_indext.sql" Indextet pour la restauration :
"C:\PostgreSQL\bin\psql.exe" --host localhost --port 5432 --usernanme postgres --file "C:\Sauvegarde\pg_dump_indext.sql" Indext#161 Re : Général » Gestion des roles » 19/04/2011 13:16:15
Quel dommage!! J'ai donc commencé à fouiller un peu sur le web et dans la doc, et une première question me vient : où sont stockés les droits?
Je sais qu'il existe une vue pg_role, mais cela ne renseigne pas sur qui a le droit de faire quoi (update, select, insert, delete) sur telle ou telle table (ou colonne).
#162 Général » Gestion des roles » 13/04/2011 13:26:31
- damalaan
- Réponses : 6
Bonjour,
Je suis à la recherche d'un tuto expliquant de manière simple et précise la gestion des droits sous postgresql qui m'a l'air d'être très poussée (puisque d'après ce que j'ai pu comprendre on peut aller jusqu'à donner des droits différents sur une colonne d'une table).
Je ne suis pas du tout habitué aux notions d'héritage.
J'ai essayé de créer par exemple avec pgadminIII un nouveau rôle, je n'y suis même pas arrivé!!! toute mon éducation est donc à faire sur ce sujet pourtant essentiel!!
merci
#163 Re : Général » Sauvegarde et restauration d'une base » 12/04/2011 20:23:17
...........nickel............. merci
#164 Général » Sauvegarde et restauration d'une base » 12/04/2011 17:01:19
- damalaan
- Réponses : 5
Bonjour,
Actuellement je fait une sauvegarde d'une base tous les jours avec les script suivant:
echo %date%
set x=%date:/=-%
echo %x%
"C:\PostgreSQL\bin\pg_dump.exe" --host localhost --port 5432 --username postgres --file "C:\Sauvegarde\pg_dump_madb.sql" madbSeulement j'ai jamais testé la restauration!!!!
d'après ce que j'ai trouvé sur le net, comme c'est un fichier sql, pg_restore ne peut pas le faire, il faudrait passer par psql...
mais je n'ai pas bien compris la doc là dessus!!
#165 Re : Général » clause not exists dans une requete » 31/03/2011 16:06:22
Evidemment ça marche nickel!!!!
Ces fichues requêtes imbriquées, je ne sais pas si j'y arriverai un jour, mon cerveau ne suit pas!!!!
merci
#166 Re : Général » clause not exists dans une requete » 31/03/2011 15:26:46
...ignorer...
ceci dit pour ma culture perso, je suis intéressé par les 2!!
#167 Re : Général » clause not exists dans une requete » 31/03/2011 15:23:17
ok pour la contrainte (même s'il n'y aura jamais de saisie manuelle, uniquement de l'import de masse)
Le doublon est effectivement basé sur les 2 premières colonnes
trn_id mg_matricule mg_val
53205 1 42.3
53205 2 42.3 -->pas doublon
53210 1 42.3-->pas doublon
53205 1 42.3-->doublon
#168 Re : Général » clause not exists dans une requete » 31/03/2011 15:14:37
il s'agit des doublons par rapport aux colonnes
trn_id bigserial NOT NULL,
mg_matricule integer NOT NULL,
mg_val numeric(4,1) NOT NULL,
de la table tbl_valeur_mg
"rien n'empêche leur insertion au niveau de PostgreSQL en tout cas."
et effectivement c'est bien là mon problème!!!
autant je l'ai bien fait sur la table tbl_tournee_trn autant sur tbl_valeur_mg je ne sais pas comment le mettre en place
je peux mettre un index (c'est d'ailleurs ce que j'ai fait sur la première table) mais ça me fera planter la fonction en cas de doublons, il faut donc que je le gère lors de l'insertion.
#169 Général » clause not exists dans une requete » 31/03/2011 14:50:56
- damalaan
- Réponses : 9
Bonjour
j'ai la fonction suivante qui me permet d’importer un fichier csv dans deux tables finales (en 1--n)
Le principe est le suivant :
-j'importe le fichier brute dans la tbl_import
-je mets en forme mes valeurs dans la tbl_temp2_tm2
-je mets un certain nb de valeurs dans la table tbl_tournee_trn (avec une clause WHERE NOT EXISTS pour ne pas avoir de doublon)
-et je termine par mettre dans la table tbl_valeur_mg les valeurs (du côté n de la relation)
Mon problème est sur cette dernière étape: je viens de m'apercevoir que je ne gère pas les doublons possibles dans cette table. Je l'ai constaté en en important plusqieurs fois le même fichier.
Je ne sais pas où placer cette condition qui je pense doit être un truc du genre WHERE NOT EXISTS
-- Function: import(text)
-- DROP FUNCTION import(text);
CREATE OR REPLACE FUNCTION import(text)
RETURNS void AS
$BODY$
DECLARE
ordre_sql varchar;
BEGIN
-- on efface les tables temporaires
delete from tbl_import;
delete from tbl_temp2_tm2;
-- on importe le fichier
SET client_encoding TO 'LATIN1';
ordre_sql := 'COPY tbl_import FROM ''' || $1 || ''' WITH CSV HEADER DELIMITER '';''';
execute ordre_sql;
-- on transforme tous les champs en données numériques et on les insère dans la 2è table temp
INSERT INTO tbl_temp2_tm2 (tm2_date_prel, tm2_tournee, tm2_esp, tm2_usine, tm2_matricule, tm2_mg)
SELECT
to_number((
(substring(annnee,3,2) ||
(case CHAR_LENGTH(mois)
when 1 then '0'||mois
when 2 then mois
end)
|| decade)), '999999') as date_prel,
to_number(tournee || tour, '9999') as tournee,
(case espece
when 'Vache ' then 1
Else 2
end) as esp,
to_number(usine, '9999'),
to_number(matricule, '999999'),
to_number(replace(mg, ',', '.'),'99.9')
from tbl_import where
annnee not like 'an%'
and
decade like '01' or decade like '02' or decade like '03'
and
usine not like '9999';
-- on insère les tournées dans la table tbl_tournee_trn
INSERT INTO
tbl_tournee_trn (trn_date_prel, trn_tournee, trn_esp, trn_usine)
SELECT DISTINCT
tm2_date_prel, tm2_tournee, tm2_esp, tm2_usine FROM tbl_temp2_tm2
WHERE NOT EXISTS
(SELECT *
FROM tbl_tournee_trn
WHERE
tbl_tournee_trn.trn_date_prel = tbl_temp2_tm2.tm2_date_prel AND
tbl_tournee_trn.trn_esp = tbl_temp2_tm2.tm2_esp AND
tbl_tournee_trn.trn_tournee = tbl_temp2_tm2.tm2_tournee AND
tbl_tournee_trn.trn_usine = tbl_temp2_tm2.tm2_usine);
-- on insère les valeurs mg dans la tbl_valeur_mg --et mon problème est là!!!!!
INSERT INTO tbl_valeur_mg (trn_id, mg_matricule, mg_val)
SELECT
tbl_tournee_trn.trn_id,
tbl_temp2_tm2.tm2_matricule,
tbl_temp2_tm2.tm2_mg
FROM
tbl_tournee_trn,
tbl_temp2_tm2
WHERE
tbl_tournee_trn.trn_date_prel = tbl_temp2_tm2.tm2_date_prel AND
tbl_tournee_trn.trn_esp = tbl_temp2_tm2.tm2_esp AND
tbl_tournee_trn.trn_tournee = tbl_temp2_tm2.tm2_tournee AND
tbl_tournee_trn.trn_usine = tbl_temp2_tm2.tm2_usine;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION import(text) OWNER TO postgres;code de la table _tournee_trn
-- Table: tbl_tournee_trn
-- DROP TABLE tbl_tournee_trn;
CREATE TABLE tbl_tournee_trn
(
trn_date_prel integer NOT NULL,
trn_esp integer NOT NULL,
trn_tournee integer NOT NULL,
trn_usine integer NOT NULL,
trn_id bigserial NOT NULL,
trn_chauffeur integer,
CONSTRAINT "clé_primaire" PRIMARY KEY (trn_id),
CONSTRAINT "clé_2" UNIQUE (trn_date_prel, trn_esp, trn_tournee, trn_usine)
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_tournee_trn OWNER TO postgres;code de la table tbl_valeur_mg
-- Table: tbl_valeur_mg
-- DROP TABLE tbl_valeur_mg;
CREATE TABLE tbl_valeur_mg
(
mg_id bigserial NOT NULL,
trn_id bigserial NOT NULL,
mg_matricule integer NOT NULL,
mg_val numeric(4,1) NOT NULL,
CONSTRAINT pk PRIMARY KEY (mg_id),
CONSTRAINT fk FOREIGN KEY (trn_id)
REFERENCES tbl_tournee_trn (trn_id) MATCH FULL
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_valeur_mg OWNER TO postgres;#170 Re : ODBC » Configuration du serveur pour un accès ODBC avec access sur un réseau » 30/03/2011 14:25:20
Effectivement dans les paramètres de mon pare-feu il fallait ouvrir le port 5432!
Merci à vous
#171 Re : ODBC » Configuration du serveur pour un accès ODBC avec access sur un réseau » 30/03/2011 12:51:34
après lecture de votre lien, j'ai changé d'une part le postgresl.conf
listen_addresses = '192.168.1.64, localhost'
ensuite j'ai essayé de modifier le pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host Indext all 192.168.0.0/0 md5
mais sans succès : lorsque j'essaie de créer une source de données ODBC, j'ai une erreur
could not connect to the server
connect failed for [192.168.1.64:5432]
#172 ODBC » Configuration du serveur pour un accès ODBC avec access sur un réseau » 30/03/2011 11:14:03
- damalaan
- Réponses : 4
Bonjour,
Sur mon pc, j'ai postgresql 9.0 et je voudrais avoir des accès sur d'autres postes sur le réseau avec Access
j'ai installé le driver ODBC, sur mon pc, ça fonctionne par contre quelle configuration faut-il renseigner dans le fichier pg_hba.conf pour réaliser cette connexion distante sur d'autres postes ?
merci
#173 Re : Général » rechercher une chaine de caractère dans une autre » 07/02/2011 21:31:14
honte à moi!!!!!
bon en fait ça marche très bien!!!
le pb c'est que j'affichais mes données sous pgadmin et dans le champ où j'effectue ma recherche il y a des 'retour à la ligne' je ne voyais donc que la première ligne....................
mille excuses pour cette erreur
#174 Général » rechercher une chaine de caractère dans une autre » 06/02/2011 22:04:26
- damalaan
- Réponses : 3
Bonjour,
soit les enregistrements suivant :
titi toto tutu
titi
toto tutu
tata titi
tutu titi tata
quand je demande de rechercher titi, je voudrais que ça me renvoie les enregistrements 1, 2 et 3
quand je demande toto ou tutu, je voudrais le 1 et le 3
etc
je pensais faire ça avec monchamp like '%titi%', ou bien monchamp like '%toto%' or monchamp like'%tutu%', mais ça ne fonctionne pas
c'est manifestement plus compliqué!!
#175 Re : Général » Utilisation de crosstab » 17/01/2011 21:18:22
ok merci ça focntionne