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 » Création de sous ensembles dont la somme des valeurs est limitée » 03/01/2017 13:27:32

Je m'en suis finalement sorti avec un enchainement de requêtes qui traitent toutes les combinaisons possibles:

6
5+1           (ou 5 si pas d'enregistrement à 1 disponible)
4+2           
4+1+1       (ou 4+1 ou 4)
3+3           
3+2+1       (ou 3+2)
3+1+1+1   (ou 3+1+1 ou 3+1 ou 3)
....


C'est un peu barbare mais ca marche !

#2 Re : Général » Création de sous ensembles dont la somme des valeurs est limitée » 02/01/2017 19:04:44

Oui c'est bien ce que je pense
mais au niveau des grandes lignes de l'algo, je ne vois pas trop .....

#3 Général » Création de sous ensembles dont la somme des valeurs est limitée » 02/01/2017 17:01:21

guil31
Réponses : 4

Bonjour,


J'ai une table contenant 3 champs:
- id:               identifiant unique de l'objet
- ensemble:    identifiant marquant l'appartenance de l'objet à un ensemble
- valeur:         valeur pour chaque objet


Par exemple:

id        ensemble       valeur
1         1                   5
2         1                   2
3         1                   1
4         2                   4
5         2                   3
6         3                   3
7         4                   1
8         4                   1
9         4                   4
10       4                   2
11       4                   2

Code correspondant:

create table ma_table (id integer, ensemble integer, valeur integer);
insert into ma_table values (1,1,5), (2,1,2), (3,1,1), (4,2,4), (5,2,3), (6,3,3), (7,4 ,1), (8,4 ,1), (9,4 ,4), (10,4 ,2), (11,4 ,2)

Je souhaite faire des sous ensembles à l'intérieur de mes ensembles pour lesquels la somme des valeurs n'excède jamais 6.

id        ensemble       valeur     sous_ensemble   sum_valeur
1         1                   5            1                       6
2         1                   2            2                       3
3         1                   1            1                       6
4         2                   4            1                       4
5         2                   3            2                       3
6         3                   3            1                       3
7         4                   1            1                       4
8         4                   1            1                       4
9         4                   4            2                       6
10       4                   2            2                       6
11       4                   2            1                       4

Ceci en créant de préférence des groupes dont la somme des valeurs est le plus proche possible de 6
et en générant le moins de sous ensemble possible


J'exécute mes requêtes sql depuis un code python 2.7 et je dispose de postgresql 9.1


Comment vous y prendriez-vous?
Merci pour votre aide

#4 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 02/11/2015 18:46:55

Effectivement c'est bien cela il faut cocher "Enregistrer le mot de passe" quand on se connecte dans pgadmin.

Merci

#5 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 02/11/2015 18:20:50

En fait, comme mon fichier pgpass.conf est vidé, mes scripts python restent de nouveau bloqués en attente de mot de passe.
Je peux à nouveau remplacer le fichier pgpass.conf par celui que j'avais récupéré de mon ancien compte et mon script fonctionne de nouveau....
....jusqu'à ce que je me reconnecte sur pgadmin et que le fichier soit de nouveau vidé!

#6 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 02/11/2015 18:01:09

Bonjour,


Je relance le sujet car mon problème n'est pas complétement résolu...


En effet j'ai remarqué que lorsque je me reconnecte dans pgadmin, mon fichier pgpass.conf est entièrement vidé.


Pourquoi ce comportement? Et comment le contourner?

#7 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 30/10/2015 11:03:45

Merci mille fois!


C'était bien ca le problème
Mon nouveau fichier pgpass.conf était vide, j'ai donc récupéré l'ancien et tout fonctionne

#8 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 29/10/2015 15:52:31

Merci
Je ne suis pas sur mon poste cet après-midi
Je regarde ca demain matin ....

#9 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 29/10/2015 12:58:12

Les scripts sont effectivement sur la même machine


Avant de poster ce message sur le forum j'étais déjà allé voir ce fichier pg_hba.conf, mais j'avoue ne pas avoir trop compris.


Ce fichier ne contient que 2 lignes non commentées
Voici un extrait de ce fichier:


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

#10 Re : Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 29/10/2015 11:51:28

Voici un extrait du code qui exécute mes commandes en lignes

    p = subprocess.Popen(commande,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE, env=os.environ)
    stdout,stderr = p.communicate()

Dans commande je passe

            commande = 'psql -q -h localhost -p 5433 -U postgres -d mabase  -f "monfichier.sql"'

ou

            commande = 'shp2pgsql -d -I -s 2154 -g the_geom -W "latin1" "monfichier.shp" matable | psql -q -h localhost -p 5433 -U postgres -d mabase'

Mon outil ne plante pas mais il attend une réponse
Quand je lance ces commandes en ligne de commande en dehors du code je dois rentrer le mot de passe

Avant de changer de domaine je n'avais pas besoin de saisir de mot de passe


Concernant le changement de domaine:
Je suis sur Windows 7 Professionnel SP1
Mon entreprise a décidé de mettre à plat la messagerie et dans ce cadre tous les postes ont été changés de domaine
Pour ce faire je suis allé dans les propriétés système dans la fenêtre de modification du nom du domaine de l'ordinateur et j'ai choisi le bouton radio 'Membre d'un domaine' en indiquant un nom de domaine qui est commun à tous les employés.
Ensuite l'administrateur m'a changé mes droits pour que je puisse être administrateur sur ma machine
Suite à toutes ces manipulations je ne me connecte plus sur le même compte sur ma machine
Je garde mon ancien compte pendant encore 1 mois
Sur mon ancien compte je n'ai pas ce problème

#11 Général » Postgres 9.1 - Repercussion d'un changement de nom de domaine » 28/10/2015 17:17:30

guil31
Réponses : 12

Bonjour,


Je viens de changer le nom de domaine de ma machine.


Postgres 9.1 avait été installé sur mon poste lorsque j'avait encore l'ancien nom de domaine.
Le client et le serveur sont tout les deux sur mon poste.
J'utilise des scripts en python qui lancent des commandes en ligne pour exécuter des fichiers de type .sql et importer des fichiers cartographique type shp.


Avant le changement de nom de domaine aucun mot de passe n'était demandé pour ces commandes en lignes.
Depuis le changement, un mot de passe est demandé et du coup mes outils python attendent une réponse et restent bloqués.


Je ne maitrise pas du tout ces aspects de Postgres mais je suppose qu'il faudrait pouvoir redéfinir le nom du domaine qui a été pris en compte lors de l'installation de postgres sur mon poste.


Est-ce bien cela mon problème et est-ce que c'est possible de le faire sans désinstaller et réinstaller postgres?


Merci pour votre aide

#13 Général » Dégrouper un champ à plusieurs valeurs en créant n enregistrements » 25/08/2015 12:41:55

guil31
Réponses : 2

Bonjour,


J'ai une table de ce type :

id ; zone
------------
1 ; "A"
2 ; "A,B,F"
3 ; "C,E"


J'aimerais obtenir cela :

id ; zone
------------
1 ; "A"
2 ; "A"
2 ; "B"
2 ; "F"
3 ; "C"
3 ; "E"


Je ne vois pas trop comment m'y prendre, est-ce quelqu'un a une idée?
Merci pour votre aide

#14 Re : PL/pgSQL » pb de syntaxe boucle sur une selection » 12/06/2015 09:36:26

Merci (j'étais allé sur cette page mais je l'avais certainement passé trop vite)
Bref: voici le code correspondant à la solution trouvée

CREATE OR REPLACE FUNCTION ma_fonction(ma_table text)  AS $BODY$
   DECLARE
      c1 text;
      c2 text;
      ....
   BEGIN
      ....
      FOR x in EXECUTE '(SELECT champ_1, champ_2 FROM ' || ma_table || ')'
      LOOP
         c1 = x.champ_1;
         c2 = x.champ_2; 
         ....
      END LOOP;

    END;
$BODY$
LANGUAGE 'plpgsql';

#15 Re : PL/pgSQL » Utilisation crosstab ou autre solution ? » 12/06/2015 09:21:12

Déplacez le 'COUNT(*)' comme ci-dessous:

SELECT * FROM crosstab (
'SELECT service,EXTRACT(YEAR FROM date)AS annee  ,COUNT(*) nb FROM device GROUP BY service,EXTRACT(YEAR FROM date) ORDER BY service,EXTRACT(YEAR FROM date)' ,
'SELECT DISTINCT EXTRACT(YEAR FROM date) AS annee FROM device')
as (service varchar, "2011" numeric, "2012" numeric, "2013" numeric, "2014" numeric)

#16 PL/pgSQL » pb de syntaxe boucle sur une selection » 11/06/2015 15:53:41

guil31
Réponses : 3

Bonjour,


Je fais mes premières armes en plpgsql et j'ai un problème de syntaxe.
Je souhaite faire une boucle sur les résultats d'une sélection mais dans cette sélection le nom de la table est en fait un paramètre de ma fonction.

En gros je souhaite écrire quelque chose qui ressemble à ca:

CREATE OR REPLACE FUNCTION ma_fonction(ma_table text)  AS $BODY$
   DECLARE
      c1 text;
      c2 text;
      ....
   BEGIN
      ....
      FOR x in (SELECT champ_1, champ_2 FROM ma_table)
      LOOP
         c1 = x.champ_1;
         c2 = x.champ_2; 
         ....
      END LOOP;

    END;
$BODY$
LANGUAGE 'plpgsql';

Mais le 'ma_table' dans le FOR x ne passe pas.
(Par contre si je mets le nom de la table en dur c'est ok)


Merci pour votre aide

#18 Général » [postgresql 9.1] Syntaxe create table ... as select » 08/06/2015 17:00:50

guil31
Réponses : 2

Bonjour,


Je souhaite créer une table à partir d'une sélection et d'un nouveau champ pour lequel je veux définir le type.


J'y arrive sans spécifier le type du champ:
create table ma_table as select *, 'blabla' as mon_champ from ......[ma selection]


'mon_champ' est alors de type unknown alors que je voudrais spécifier que c'est du text
Est-ce que c'est possible?


Merci pour votre aide

Pied de page des forums

Propulsé par FluxBB