Vous n'êtes pas identifié(e).
Pages : 1
Donc si je comprend bien, pour qu'une base de donnée soit partagée, il faut que Postgres soit aussi "partagé" (dans mon cas, il faut qu'il soit installé sur le serveur) ?
Bonjour,
On arrive pas à installer PostgrSQL sur un serveur distant d'un client!! Je souhaite savoir si il serai possible d'installer en local PostgrSQL sur plusieurs postes et mettre les fichiers de données "pgdata" sur un serveur partagé ?
l'idée est de faire pointer, ensuite, les "pgdata" de chaque poste vers le "pgdata" partagé via des liens symbolique...que pensez-vous, cela peut fonctionner ?
d'avance, merci.
Bonjour,
J'ai finalement rajouté, dans mon application, un script qui lance le .bat.
Pour ceux que ça intéresse voici le code python :
import os
os.chdir("C:\Users\PORTABLE\Desktop\batfile")
os.sytsem("hello.bat)
Merci pour ton aide rjuju, j'ai appris pleins de trucs avec toi
Quand vous dite " Vous pouvez toutefois ajouter ce script dans la liste des scripts à lancer au démarrage si c'est plus simple pour vous." c'est la liste des scripts qui démarrent avec Windows au lancement de la machine ?
Vous l'avez compris, en fait, je cherche une solution pour lancer le serveur automatiquement, soit au lancement de mon application soit au démarrage de Windows...mais le fait que je ne soit pas administrateur sur la machine, ça limite mes possibilités!
L'installation classique permet notamment d'ajouter un nouveau service windows. Si vous n'avez pas les privilèges suffisant pour ajouter un service, il faut effectivement démarrer manuellement l'instance. Vous pouvez toutefois ajouter ce script dans la liste des scripts à lancer au démarrage si c'est plus simple pour vous.
Ajouter ce script coté Postgresql, cela est possible ? effectivement ça serai la solution pour moi car je n'ai pas l'autorisation d'ajouter des services...
OK, j'ai créer un serveur depuis pgAdmin et ça fonctionne. Merci c'était bien le REM que je laissait !!
Pour communiquer avec mes base de données depuis mon application, dois-je à chaque fois lancer le script pour démarrer le serveur ? avec l'installation classique j'avais pas besoin de cela
Ah! non je n'avais pas retirer le "REM" de la ligne : REM "%~dp0\bin\initdb" -U postgres -A trust
Je ne suis pas sûr de comprendre la procédure ! voici ce que je fais :
1/ décompresser le zip pgsql
2/ créer le script (.bat) dans le dossier pgsql
3/ retirer le "REM"
4/ lancer le script
5/lancer pgAdmin qui se trouve dans pgsql\bin
Non, je n'ai aucune erreur, tout semble ok
Bonjour,
Je souhaite avoir Postgresql sur un poste sous win dont je ne suis pas l'administrateur. Donc je dois "l'installer" sans passer par l'installation "classique" (.exe). la version binaire de postgresql semble permettre cela.
J'ai suivi ceci http://dba.stackexchange.com/questions/ … ostgresql/ mais sans succès ! quand je démarre pgAdmin je ne trouve pas mon serveur, et si j'ajoute un serveur depuis pgAdmin, je reçois le message : serveur doesn't listen.
Je ne sais ce que je ne fais pas bien !!
Quelqu'un a déjà fait ce type d’installation ?
Merci
Très bien, je vais voir cela avec l'hébergeur.
Merci de votre aide
C'est la version 9.0.13 qui est installée.
Quand j'execute le code :
-- the generic crosstab function:
CREATE OR REPLACE FUNCTION crosstab(text)
RETURNS setof record
AS 'MODULE_PATHNAME','crosstab'
LANGUAGE C STABLE STRICT;
J'ai l'erreur "permission denied for language c" !
Depuis PgAdmin, pour la création de l'extension, j'exécute le code suivant sur ma bd hébergée :
CREATE EXTENSION tablefunc
SCHEMA public
VERSION "1.0";
Voici le message d'erreur
ERROR: syntax error at or near "EXTENSION"
LINE 5: CREATE EXTENSION tablefunc
La vue "pg_available_extensions" n'est pas dans la liste des vues présentes sur ma bd hébergée.
Bonjour,
Merci Julien pour ta réponse. Effectivement, la fonction "crosstab" répond parfaitement à ce qu'est recherché. Voici le code complet de la requête pour les lecteurs intéressés.(test fait sur une bd locale)
SELECT * FROM crosstab('SELECT objet, dateM, valeur FROM mesure ORDER BY dateM DESC LIMIT 2 OFFSET 0')AS ct (objet text, dateM double precision, valeur double precision);
L'utilisation de cette fonction est possible qu'après l'installation de l'extension "tablefunc". Ma base de données est hébergée sur un serveur mutualisé. Je pense que l'extension n'est pas installée sur le serveur et donc je n'arrive pas à exécuter la fonction "crosstab". Comment ça se passe dans le cas d'un serveur mutualisé, c'est à l'hébergeur d'installer les extensions de Postgresql ?
Merci.
Bonjour,
J'ai la table suivante :
mesure :
objet dateM valeur
obj1 2013-01-01 4
obj2 2014-02-15 2
obj1 2010-09-14 5
obj2 2011-12-25 10
obj1 2008-01-25 25
Je cherche à trouver les valeurs des deux plus récentes dates pour chaque objet et afficher le résultat sur une seule ligne. Voici le résultat attendu :
objet dateM1 valeur1 dateM2 valeur2
obj1 2013-01-01 4 2010-09-14 5
obj2 2014-02-15 2 2011-12-25 10
Avec le code ci-dessous, j'arrive à trouver les bonnes valeurs mais sur 2 lignes. J'ai aussi essayer les jointures sans succès!
SELECT objet, dateM, valeur FROM mesure ORDER BY dateM DESC LIMIT 2 OFFSET 0
Merci de votre aide.
Elle fonctionne parfaitement
Merci Julien
Bonjour,
Je vous sollicite dans le cadre d’une requête que je n’arrive pas à coder.
J’ai deux tables
Table travaux :
CT dateT
Obj1 2011-01-01
Obj1 2012-01-01
Obj2 2014-01-01
Obj4 2015-01-01
Table mesure :
CM mesure dateM
Obj1 1 2010-05-01
Obj1 4 2013-01-01
Obj1 8 2015-01-01
Obj2 0.5 2015-01-01
La requête que j’essaye de faire consiste à trouver la mesure la plus faible de «CM » depuis la date d. d = la date la plus récent de CT où CT=CM
Dans notre exemple le résultat attendu est
CM mesure
Obj1 4
Obj2 0.5
J’ai essayé cette requête mais elle me donne une erreur car l'expression de HAVING n'est pas correct
SELECT CM, min(mesure) FROM mesure INNER JOIN travaux ON ((CM = CT)) GROUP BY CM HAVING (dateM>max(dateT))
Merci d'avance
c'est bon j'ai trouvé mon problème. il fallait faire parent=c.paren.name
merci
Bonjour,
Dans mon code python, j’ai une requête (la 2ème) qui ne renvoie aucune valeur et je ne sais pas pourquoi !!
J’ai toujours recent[0] =None.
Merci de votre aide
voici le code :
for travaux ,recentT in db.prepare("SELECT site,max(date_travaux) FROM travaux GROUP BY site"):
......
je trouve l'année (annee)
je trouve le site (c)
#s'il s'agit d'un site dans le groupe "Travaux"
if c.name in bpy.data.groups["Travaux"].objects:
#trouve le père du c
pere=c.parent
#je cherche la date la plus récente du père
recentPere=db.prepare("SELECT MAX(date_travaux) FROM travaux WHERE id_travaux='%s'"%pere)
#je comprae la date du pere avec celle du C
for recent in recentPere:
if(recent[0]!=None):
anneePere=str(recent[0].year)
if(anneePere>=annee):
......
Très bien c’est très clair. Cela veut dire que ma base peut être installée sur un serveur distant sans connaitre de véritable ralentissement à condition de programmer la logique en SQL ! Ouf, je suis rassuré !
Merci infiniment,
Merci de votre réponse.
Pour mieux comprendre :
Je viens de faire un test de lancer la requête sql vous avez indiqué avec pgadmin sur le serveur distant, le temps d’exécution est 25ms ! Cela n’écarte pas la latence réseau ?
Quel est la différence entre programmer la logique en python (ou autre) et le faire en sql ?
Bonjour,
Je suis nouveau sur le forum et je suis débutant dans le « domaine » des bases de données.
J’ai un problème de lenteur avec mes requêtes quand j’utilise un serveur distant (serveur mutualisé ou mon pc en serveur sur un réseau).
Je souhaite connaitre l’avis des personnes plus expérimentées que moi pour être sûr que ma table et mes requêtes sont bien « faites » et optimisées…
Ma table « travaux » est constituée de 7 colonnes : id_site, date_travaux, commentaire…
Je souhaite connaitre la date_travaux la plus récente pour chaque site (sachant que un seul site peut avoir plusieurs date_travaux »
Voici ma requête que je lance depuis mon application « locale » écrite en python :
# parcourir les sites dans table « travaux »
for site in db.prepare("SELECT DISTINCT id_site FROM travaux"):
# chercher la date la plus récente
recentT=db.prepare("SELECT MAX(date_travaux) FROM site WHERE id_site='%s' " %site[0])
Le temps d’exécution de cette requête sur une table de 450 lignes :
En Local : 1s
Serveur distant : 13s
pour info, la connexion à la base depuis l'application est très rapide, donc ce n'est pas cela la cause du ralentissement.
Merci de votre aide.
Pages : 1