PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » requete SELECT à 4 tables » 22/01/2013 11:02:47

merci à vous marc,
je republie la requete au complet pour les autres..

**//

SELECT tmp1.*,  coalesce(sum(A3.dpa * A3.quantite),0) as Cout_pieces, tmp1.Cout_MO + coalesce(sum(A3.dpa * A3.quantite),0) as total
FROM
  (SELECT E1.id_entete_ot,
          E1.date_ot,
          E1.service,
          E2.nro_equipement,
          E2.designation,
          E2.nom_organe,
          E1.description,
          E2.id_equipement,
          coalesce(sum(O2.temps),0) AS Temps,
          coalesce(sum(O2.temps * O2.cout_pe),0) AS Cout_MO           
   FROM entete_ot E1
   LEFT OUTER JOIN equipements E2 ON (E1.id_equipement = E2.id_equipement)
   LEFT OUTER JOIN ot O2 ON (E1.id_entete_ot = O2.id_entete_ot)
where E1.date_ot between '01/01/2012' and '31/12/2012' and E1.service like 'ACCREDITATION QUALITE%' and E2.type_equipement like '%' and lower(E2.nom_organe) like '%' and lower(E2.designation) like '%'
   GROUP BY E1.id_entete_ot,
            E1.date_ot,
            E1.service,
            E2.nro_equipement,
            E2.designation,
            E2.nom_organe,
            E1.description,
            E2.id_equipement) AS tmp1
LEFT JOIN articles_ot A3 ON (tmp1.id_entete_ot = A3.id_entete_ot)
GROUP BY tmp1.id_entete_ot,
            tmp1.date_ot,
            tmp1.service,
            tmp1.nro_equipement,
            tmp1.designation,
            tmp1.nom_organe,
            tmp1.description,
            tmp1.id_equipement,
            tmp1.temps,
            tmp1.Cout_MO

#2 Re : Général » requete SELECT à 4 tables » 22/01/2013 10:04:48

Nickel, merci ça marche !!!!
ma valeur n'est plus démultipliée.
encore une chose, avez vous une solution pour que mon addition se fasse, lorsque
une somme renvoi un null ?

#3 Re : Général » requete SELECT à 4 tables » 22/01/2013 09:46:26

vous avez publié un post apres moi,
si, je souhaite en effet utiliser A3, j'avais ommis  de l'ajouter dans ma requete.

#4 Re : Général » requete SELECT à 4 tables » 22/01/2013 09:29:31

En effet j'ai ommis d'ajouter l'utilisation de A3
voici ce que je souhaiterais
*//
SELECT
   E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description,
   sum(O2.temps) as Temps,
   sum(O2.temps * O2.cout_pe) as Cout_MO,
   sum(A3.dpa * A3.quantite) as Cout_pieces,
   sum(O2.temps * O2.cout_pe) + sum(A3.dpa * A3.quantite) as Cout_Total,
   E2.id_equipement
FROM
   entete_ot E1 left outer join equipements E2 on (E1.id_equipement = E2.id_equipement)
   left outer join ot O2 on (E1.id_entete_ot = O2.id_entete_ot) 
   left outer join articles_ot A3 on (E1.id_entete_ot = A3.id_entete_ot)
group by
   E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description, E2.id_equipement
*//
pour être complet dans, il se peut, que par exemple des valeurs n'existes pas :
sum(A3.dpa * A3.quantite) as Cout_pieces, -> renvoi NULL
sum(O2.temps * O2.cout_pe) -> = 50
ce qui a pour effet de ne pas additionner
sum(O2.temps * O2.cout_pe) + sum(A3.dpa * A3.quantite) as Cout_Total,
50 + NULL = NULL
comment solutionner cette partie ?

merci par avance,

#5 Re : Général » requete SELECT à 4 tables » 22/01/2013 00:35:42

bah, je souhaiterais une valeur qui ne soit pas démultiplié...

#6 Général » requete SELECT à 4 tables » 21/01/2013 14:42:48

unisol
Réponses : 10

bonjour,
j'ai une requete de ce type
//**
SELECT E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description, sum(O2.temps) as Temps, E2.id_equipement

FROM entete_ot E1 left outer join equipements E2 on (E1.id_equipement = E2.id_equipement)
left outer join ot O2 on (E1.id_entete_ot = O2.id_entete_ot) 

group by E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description, E2.id_equipement

//**

la colonne Temps est correctement calculée.

si je modifie la clause FROM comme ceci avec une requete à 4 tables :

//**
SELECT E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description, sum(O2.temps) as Temps, E2.id_equipement

FROM entete_ot E1 left outer join equipements E2 on (E1.id_equipement = E2.id_equipement)
left outer join ot O2 on (E1.id_entete_ot = O2.id_entete_ot) 
left outer join articles_ot A3 on (E1.id_entete_ot = A3.id_entete_ot)

group by E1.id_entete_ot, E1.date_ot, E1.service, E2.nro_equipement, E2.designation, E2.nom_organe, E1.description, E2.id_equipement

//**

la colonne Temps se voit démultiplié et renvoit une valeur incorrecte

le schema souhaité est :
pour une valeur E1 -> une valeur E2
pour une valeur E1 -> une ou plusieurs valeurs O2
pour une valeur E1 -> une ou plusieurs valeurs A3

merci pour votre aide.

#7 Re : PHP » creation user + database » 10/08/2012 14:19:56

Bonjour,

merci pour votre réponse,

je confirme que le script marche bien,
mais, j'ai du donner des droit superuser (pas sécurisé) pour y arriver:

si la commande :
CREATE USER utilisateur WITH ENCRYPTED PASSWORD 'mot_de_passe';
se passe bien

la commande suivante genere une erreur :
CREATE DATABASE dbtest  WITH OWNER = test1 TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8' CONNECTION LIMIT = -1

ERREUR:  doit être un membre du rôle « test1 »


********** Erreur **********

ERREUR: doit être un membre du rôle « test1 »
État SQL :42501

---
voici les caractéristiques de mon user avec le quel j'exécute ces commandes :

CREATE ROLE userchef LOGIN
  NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION;

--

merci pour votre réponse

#8 PHP » creation user + database » 10/08/2012 00:57:10

unisol
Réponses : 3

Bonjour,

je souhaiterais faire executer un fichier bash suivant depuis une page PHP. Mais je me heurte au probleme des droits d'execution.
En effet, depuis une page PHP, c'est l'utilisateur www-data qui est actif, ce provoque un probleme.
------------------------------------------------------------
#!/bin/bash

su - postgres -c "psql -c \"create user $1 WITH ENCRYPTED PASSWORD '$2';\""
su - postgres -c "psql -c \"CREATE DATABASE $1 WITH OWNER = $1 TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default  LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8'   CONNECTION LIMIT = -1;\""
su - postgres -c "psql -c\"GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to $1;\" $1"
--------------------------------------------------------------

Donc, est il possible de créer un script pure PHP, du genre qui marche...

$dbconn = pg_connect("host=localhost user='monuser' password='mon*mot*passe' port='5433' ")
                or die('Connexion impossible : ' . pg_last_error());

            $query1 = "CREATE USER 'user1' WITH ENCRYPTED PASSWORD '".$2."'";//créer un nouvel utilisateur
            $result1 = pg_query($query1) or die('Échec de la requête : ' . pg_last_error());

            $query2 = "ALTER ROLE 'user1' WITH CREATEDB";
            $result2 = pg_query($query2) or die('Échec de la requête : ' . pg_last_error());

            $query3 = "CREATE DATABASE 'user1' WITH OWNER = 'user1' TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8' CONNECTION LIMIT = -1";
            $result3 = pg_query($query3) or die('Échec de la requête : ' . pg_last_error());

merci par avance de votre aide

#10 Re : Installation » creation user limité a sa base » 16/03/2012 16:37:53

merci, j'avance
j'ai fais  :

-bash-4.1$ psql -d dbjean
dbjean=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public
'pas de message
dbjean=#GRANT SELECT, DELETE, UPDATE, INSERT, CONNECT ON ALL TABLES IN SCHEMA public
'pas de message non plus

à présent j'arrive à me connecter.
merci à vous.

depuis la ligne de commande et sous un systeme linux, comment
restaurer un backup vers une base fraichement créee ?

#11 Re : Installation » creation user limité a sa base » 16/03/2012 14:39:53

je me loggue avec :
su - postgres;
$psql
#postgres

à quelle moment on determine la base ?

#12 Re : Installation » creation user limité a sa base » 16/03/2012 14:10:47

justement, quel est la synthaxe exact, ce qui me troublen c'est comment postgres determine la base sur la quelle ont agit.
on a un nom de nom_schéma, ce suffit -il ?

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA nom_schéma

#13 Re : Installation » creation user limité a sa base » 16/03/2012 13:33:40

j'ai compris mon erreur, on ne peut pas faire grant select sur une base, mais que sur des tables.
je cherche...

#14 Re : Installation » creation user limité a sa base » 16/03/2012 13:23:36

j'ai une base appartenant à jean !

postgres=# CREATE DATABASE dbjean  WITH OWNER = jean ENCODING = 'UTF8'  TABLESPACE = pg_default  LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8'   CONNECTION LIMIT = -1;

mais :

postgres=# GRANT SELECT, INSERT, UPDATE, DELETE, CONNECT  ON DATABASE dbjean TO jean;
ERREUR:  droit SELECT invalide pour la base de données

toujours, merci pour votre aide.

#15 Installation » creation user limité a sa base » 16/03/2012 12:57:35

unisol
Réponses : 12

Bonjour,

j'ai des difficultés à créer un utilisateur, qui ne peut pas lister les autres bases
et qui aurait des droits communs sur sa base :

postgres=# create user jean;
CREATE ROLE
postgres=# alter role jean with createdb;
ALTER ROLE
postgres=# ALTER USER jean WITH ENCRYPTED PASSWORD 'azerty';
ALTER ROLE
postgres=# create database jean ;
CREATE DATABASE
postgres=# psql -d template0 -c "alter user jean with password 'azerty'"

dans PGadmin j'ai bien une base une base qui porte le nom jean, mais impossible d'importer quoi que ce soit dessus
si je créeé une base dbjean et que j'essaie de l'attribuer à jean, j'ai une erreur:
"doit être membre du role jean"

bref, un peu perdu

merci pour votre aide

#16 Re : Installation » installation de postgresql-8.4.10 a distance sur un serveur Centos » 10/02/2012 17:35:42

merci baradji, mais j'avoue que ce billet me pertube une peu.
tu demandes de l'aide le 03/02/2012
et aujourd'hui on est a se demander si tu es la meme personne.
belle progression !!!

#20 Re : Installation » probleme initdb » 05/02/2012 19:15:11

neanmpins une question pour les spécialistes Linux
pourquoi ai je des caratères bizarre à la place des latins ?

merci

[root@s16054678 data]# su -lc 'service postgresql-9.1 initdb'
Initialisation de la base de données :                   [  OK  ]
[root@s16054678 data]# su -lc 'service postgresql-9.1 start'
Démarrage du service postgresql-9.1 :                    [  OK  ]
[root@s16054678 data]# su - postgres
-bash-4.1$ psql
psql (9.1.2)
Saisissez « help » pour l'aide.

#21 Re : Installation » probleme initdb » 05/02/2012 19:10:51

C'est bon j'ai trouvé (je suis...)

il faut (tres simplement)

# su -lc 'service postgresql-9.1 initdb'

j'ai lu sur une page wiki que le service postgres 9.x et supérieur se nomme
postgresql-9.0

et betement je m'obstinait

@+

#22 Re : Installation » probleme initdb » 05/02/2012 19:03:58

J'apporte des éléments supplémentaires qui me semblent louches :
j'ai une centos or cette ligne me semble louche

postgresql91-9.1.2-1PGDG.rhel6.x86_64.rpm                         

****

l'edition du fichier  CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://update.onlinehome-server.info/distribution/centos/$releasever/os/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://update.onlinehome-server.info/distribution/centos/$releasever/updates/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*
#additional packages that may be useful
[extras]
"CentOS-Base.repo" 57L, 2446C written

l'install elle meme donne ça :

su -c 'yum install postgresql-server'
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
base                                                                     | 3.7 kB     00:00     
extras                                                                   | 3.5 kB     00:00     
updates                                                                  | 3.5 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package postgresql91-server.x86_64 0:9.1.2-1PGDG.rhel6 will be installed
--> Processing Dependency: postgresql91 = 9.1.2-1PGDG.rhel6 for package: postgresql91-server-9.1.2-1PGDG.rhel6.x86_64
--> Running transaction check
---> Package postgresql91.x86_64 0:9.1.2-1PGDG.rhel6 will be installed
--> Processing Dependency: postgresql91-libs = 9.1.2-1PGDG.rhel6 for package: postgresql91-9.1.2-1PGDG.rhel6.x86_64
--> Running transaction check
---> Package postgresql91-libs.x86_64 0:9.1.2-1PGDG.rhel6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================
Package                      Arch            Version                     Repository       Size
================================================================================================
Installing:
postgresql91-server          x86_64          9.1.2-1PGDG.rhel6           pgdg91          3.5 M
Installing for dependencies:
postgresql91                 x86_64          9.1.2-1PGDG.rhel6           pgdg91          949 k
postgresql91-libs            x86_64          9.1.2-1PGDG.rhel6           pgdg91          186 k

Transaction Summary
================================================================================================
Install       3 Package(s)

Total download size: 4.6 M

#23 Installation » probleme initdb » 05/02/2012 18:54:00

unisol
Réponses : 4

Bonjour,

j'ai déjà installé un postgresql sur une centos 5  mais la ça coince sur une 6
le initdb ne marche pas

#su -lc 'service postgresql initdb'
postgresql: service non reconnu

#su -lc 'service postgresql-9.0 initdb'
postgres-9.0: service non reconnu

#service postgresql-9.0 initdb
postgresql-9.0: service non reconnu

voici les traces de l'install

merci pour votre aide.

*****
Downloading Packages:
(1/3): postgresql91-9.1.2-1PGDG.rhel6.x86_64.rpm                         | 949 kB     00:01     
(2/3): postgresql91-libs-9.1.2-1PGDG.rhel6.x86_64.rpm                    | 186 kB     00:00     
(3/3): postgresql91-server-9.1.2-1PGDG.rhel6.x86_64.rpm                  | 3.5 MB     00:00     
------------------------------------------------------------------------------------------------
Total                                                           1.9 MB/s | 4.6 MB     00:02     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : postgresql91-libs-9.1.2-1PGDG.rhel6.x86_64                                   1/3
  Installing : postgresql91-9.1.2-1PGDG.rhel6.x86_64                                        2/3
  Installing : postgresql91-server-9.1.2-1PGDG.rhel6.x86_64                                 3/3

Installed:
  postgresql91-server.x86_64 0:9.1.2-1PGDG.rhel6                                               

Dependency Installed:
  postgresql91.x86_64 0:9.1.2-1PGDG.rhel6      postgresql91-libs.x86_64 0:9.1.2-1PGDG.rhel6     

Complete!
[root@s16054678 ~]# su - postgres
-bash-4.1$ psql
psql: n'a pas pu se connecter au serveur : Aucun fichier ou dossier de ce type
        Le serveur est-il actif localement et accepte-t-il les connexions sur la
        socket Unix « /tmp/.s.PGSQL.5432 » ?

à ce message d'erreur je sais qu'il faut initialiser la base avec un initdb qui a marché sur ma derniere install sur centos 5

#24 Re : Général » convertion de temps » 29/05/2011 12:18:19

est ce  que dans les faits cela oblige t'il  les utilisateurs à convertir eux meme le temps en centieme ?

Pied de page des forums

Propulsé par FluxBB