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).

#26 Re : PHP » Test de connexion basique » 10/08/2010 15:54:13

C'est vrai autant pour moi, j'utilise une distribution Linux F12, j'ai fais l'installation de PostgreSQL
via le repo pgdg84 en utilisant yum.

#27 Re : PHP » Test de connexion basique » 10/08/2010 15:45:17

- C'est normal qu'il n'y ait même pas de nom d'utilisateur à la chaine de connexion ?

J'ai rajouté un nom d'utilisateur et un mot de passe, mais cela ne change rien.

Ou se trouve le fichier du log des erreurs de PostgreSQL, j'ai regardé dans /var/log et je ne trouve rien!

#28 PHP » Test de connexion basique » 10/08/2010 15:16:20

sophonie
Réponses : 14

Bonjour à toutes et à tous,

Ma base de données PostgreSQL est active sur le serveur localhost port 5432, via PHP j'ai conçu
un script permettant de tester la connection au serveur de Base de données.
Je n'arrive pas à me connecter à la Base de données, voici le script PHP permettant de tester
la connection :

--- fichier connection.inc.php ---
<?php
$connection = pg_connect("host=localhost port=5432 dbname=jogstore")
     or die ("Nao consegui conectar ao PostGres --> " . pg_last_error($conn)); 
?>
--- fichier accueil.php ---
<div id="container">
            <h5>Fiche article</h5>
                <?php include('connection.inc.php'); 

                $result=pg_exec("SELECT COUNT(*) FROM articles;");
                $fetch = pg_fetch_row($result); 

                pg_close($connection); 
                ?> 
</div>

Dans l'affichage du fichier accueil.php, j'ai le message Nao consegui conectar ao PostGres -->
La connection ne semble pas se faire ....

Merci d'avance.
Sophonie.

#29 Re : Installation » Création d'une connexion PostGIS depuis Quantum GIS » 27/04/2010 16:23:23

Résolu.

En fait il faut installer le daemon oidentd présent dans le dépôt de Fedora.
Ce démon permet l'identification de l'utilisateur en utilisant le protocole TCP se dernier
utilise le port 113 pour se connecter.
En tant que root :

yum install oidentd

Suite à cette installation je peux me connecter à la Base de données inventaire et récupérer
les données géo-spatial.

Merci encore.
Sophonie.

#30 Re : Installation » Création d'une connexion PostGIS depuis Quantum GIS » 27/04/2010 11:27:56

Avez vous demandé à PostgreSQL de recharger sa configuration après la modification de pg_hba.conf ?

Je suppose qu'il faut arrêter le serveur postgres puis redémarrer ce dernier? Si c'est cela je le fais
automatiquement après chaque modification d'un fichier de conf.
Par ailleurs je vais remettre à ident la valeur dans le fichier pg_hba.

Sophonie.

#31 Re : Installation » Création d'une connexion PostGIS depuis Quantum GIS » 27/04/2010 11:10:31

Bonjour Marc Cousin,

Dans le fichier pg_hba.conf, j'ai modifié la ligne ident par trust mais cela n'a rien changé.
Est-ce ainsi qu'il faut procéder ou doit-on modifier un autre fichier. Car je ne vois pas d'autre
paramètre à modifier.

Merci encore.
Sophonie.

#32 Installation » Création d'une connexion PostGIS depuis Quantum GIS » 27/04/2010 10:52:50

sophonie
Réponses : 31

Bonjour à toutes et à tous,

Pré-Requis :
J'ai installé et configurer correctement PostgreSQL ainsi que le module PostGIS puisque j'arrive à me connecter et à créer une Base de données géo-spatial.

Depuis Quantum GIS, je tente de créer une nouvelle connexion pour récupérer les données de géo-référencement dans ma Base de données (qui s'appelle inventaire).
Je saisi les informations suivantes dans la fenêtre de création de connection PostgreSQL :

Name Donnees Inventaire
Host localhost
Database inventaire
Port 5432
Username Joachim
Password

NB : Il n'y a pas de mot de passe puisque depuis un shell Unix je tape psql inventaire et je suis connecté
à la Base de données inventaire.
L'utilisateur joachim est un super-user.

J'ai le message suivant quand je clique sur Test connection:
authentification Indent échoué pour l'utilisateur joachim

Merci d'avance.
Sophonie.

#33 Re : PL/pgSQL » Trigger permettant l'ajout automatique d'un record » 23/02/2010 18:31:49

Etant donné que des tuples sont déjà présents, je continuerai avec cette "coquille"

Je ne continuerai pas avec cette coquille, car les problèmes se représenteront par la suite
ultérieurement.

J'ai donc redéfini mon modèle conceptuel des données afin qu'il y ai davantage de cohérence.

Bonne soirée.
Sophonie.

#34 Re : PL/pgSQL » Trigger permettant l'ajout automatique d'un record » 23/02/2010 15:28:04

Bonjour Marc Cousin,

Effectivement la phase de conception via la méthode MERISE n'a pas été correctement mis en oeuvre
pour cette relation.
Pour que mon trigger soit opérationnel, il faut que je lui indique de ce déclencher
avant(BEFORE) l'insertion dans la table users au lieu de après(AFTER).

Ce qui donne :

CREATE TRIGGER ajout_auth BEFORE INSERT ON users

Etant donné que des tuples sont déjà présents, je continuerai avec cette "coquille".

Merci encore.
Sophonie.

#35 PL/pgSQL » Trigger permettant l'ajout automatique d'un record » 22/02/2010 16:04:11

sophonie
Réponses : 3

Bonjour à toutes et à tous,

J'ai crée un trigger permettant d'ajouter automatiquement une ligne dans la table authentification
lors de l'ajout d'un nouvel utilisateur.
Cependant, j'ai un message d'erreur lors de l'execution de la requête INSERT INTO users VALUES ...
Néanmoins voici le script PL/pgSQL permettant un ajout dans la table authentification.

CREATE OR REPLACE FUNCTION ajout_auth() RETURNS trigger AS $ajout_auth$
BEGIN
	RAISE NOTICE 'ajout du client en cours ...';
	IF (TG_OP = 'INSERT') THEN
	INSERT INTO authentification (auth_id, auth_login, auth_passwd, auth_dtecreation, auth_dtelastconnect, auth_actif) VALUES
	((SELECT COALESCE (MAX(auth_id),0) + 1 FROM authentification),lower(NEW.user_nom), initcap(NEW.user_prenom), CURRENT_DATE, CURRENT_DATE, true);
	RETURN NEW;	
	END IF;
END;
$ajout_auth$ LANGUAGE plpgsql;

CREATE TRIGGER ajout_auth AFTER INSERT ON users
	FOR EACH ROW
	EXECUTE PROCEDURE ajout_auth();

Sous psql en exécutant la requête suivante :

INSERT INTO users VALUES ((SELECT COALESCE (MAX(user_id),0) + 1 FROM users), 'DURAND','renaud','1969-04-11','renaud.durand@businessdecision.com','h','9,rue de Condé','','Bordeaux','33000', 1,11,'0556001260');

J'ai le message d'erreur suivant :

ERREUR:  une instruction insert ou update sur la table « users » viole la contrainte de clé
étrangère « fk_users_idauth »
DÉTAIL : La clé (user_idauth)=(11) n'est pas présente dans la table « authentification ».

La valeur 11 (champ idauth dans la table user) correspond à l'id que devrait avoir le nouvel utilisateur
ajouté.
Si je ne mets pas 11, qu'elle valeur dois-je mettre?

Merci d'avance.
Sophonie.

#36 Re : PL/pgSQL » Fonctions sur les chaînes de caractères » 22/02/2010 15:54:08

Bonjour à toutes et à tous,

J'ai téléchargé le code source ... mais je me rends compte que le
langage de procédure de Postgresql NE permet pas de construire des fonctions de recherche,
remplacement, substitution ... sur les chaînes de caractères.

Il faut passer par une langage comme le Perl, ou le Python en l'implémentant dans le PL du
SGBDR PostgreSQL.

Merci encore.
Sophonie.

#37 Installation » Fichier du code source de PostgreSQL » 18/02/2010 11:11:20

sophonie
Réponses : 1

Bonjour à toutes et à tous,

Sous un environnement GNU Linux, où se situe les fichiers du code source de PostgreSQL.
En effet, j'aurai souhaité savoir comment à été codé la fonction replace permettant le
remplacement d'une chaîne de caractère par une autre.

Merci d'avance.
Sophonie.

#38 Re : PL/pgSQL » Fonctions sur les chaînes de caractères » 17/02/2010 12:24:18

La fonction REVERSE existant sous Oracle, n'existe pas sous PostgreSQL. Il faut donc écrire cette
fonction.

Concernant les remplacements, la fonction REPLACE permet d'effectuer ces opérations.
replace('i', 1) etc ...

Je continue mes recherches.
Sophonie.

#39 PL/pgSQL » Fonctions sur les chaînes de caractères » 17/02/2010 10:57:54

sophonie
Réponses : 4

Bonjour à toutes et à tous,

N.B : Dans la globalité, j'ai compris comment fonctionne un trigger, et comment l'implémenter.
Ma question est d'un tout autre ordre.
Je souhaite créer un trigger permettant lors de la création d'une personne de créer automatiquement
une entrée dans la table authentification.
Le login sera la prénom de la personne en minuscule : lower(user_nom)

Pour cette partie, je bloque :
Son mot de passe sera son son prénom inversé avec la 1ère et la dernière lettre en majuscule,
et en remplaçant :
i=>1
a=>@
s=>$
l=>£
p=>%

Merci d'avance.
Sophonie.

#40 Re : PL/pgSQL » Type de retour TABLE dans un script PL/pgSQL » 11/02/2010 21:51:25

Bonsoir gleu,

Comme je l'ai souligné dans un précédent post je n'en suis qu'à mes débuts
sous PL/pgSQL donc je commet des erreurs de débutant.

Merci encore.
Sophonie.

#41 Re : PL/pgSQL » Type de retour TABLE dans un script PL/pgSQL » 11/02/2010 16:47:24

Bonjour gleu,

Pourtant il y a des données dans la table users puisqu'un

SELECT * FROM users;

renvoi les 5 records présents dans la table

Sophonie.

#42 PL/pgSQL » Type de retour TABLE dans un script PL/pgSQL » 11/02/2010 14:26:48

sophonie
Réponses : 4

Bonjour à toutes et à tous,

Dans le script suivant, mon objectif est de lister l'ensemble de la table users en affichant le nom
en minuscule, le prénom en initcap le tout trié par ordre croissant du nom

CREATE OR REPLACE FUNCTION list_client() RETURNS TABLE(user_nom text, user_prenom text) AS
$$
DECLARE
BEGIN
	RETURN QUERY SELECT LOWER(user_nom)nom, UPPER(user_prenom)prenom
	FROM users ORDER BY user_nom ASC, user_prenom;
	RETURN;
END;
$$ LANGUAGE plpgsql;

Sous psql, en faisant un SELECT * FROM users;
les colonnes user_nom et user_prenom s'affichent mais le contenu des champs est vide (valeur NULL)

Merci d'avance.
Sophonie.

#43 Re : PL/pgSQL » Transformation de type d'une expression sous PL/pgSQL » 05/02/2010 13:07:30

Résolu.

En fait, la variable val déclarée dans la boucle FOR est automatiquement définie avec le type record,
[et existe seulement dans la boucle].
La colonne devant récupérer cette valeur (num3) est de type integer. Donc il faut modifier l'expression

INSERT INTO table3(num3) VALUES(val);

pour que la valeur à l'intérieur de VALUES() puisse être une donnée de type integer.

Ainsi il faut écrire

INSERT INTO table3(num3) VALUES(val.resultat);

resultat étant le nom de la colonne de la table multiplication.

En souhaitant que ce post puisse servir à d'autres.

Bonne journée.
Sophonie.

#44 PL/pgSQL » Transformation de type d'une expression sous PL/pgSQL » 05/02/2010 10:52:00

sophonie
Réponses : 1

Bonjour à toutes, et à tous,

Je continue mon extrapolation du langage de procédure de PostgreSQL.
Le but de cet exercice (purement pédagogique) est de récupérer l'ensemble des records
du champ d'une table et de les stocker dans le champ d'une autre table.
J'utilise donc un curseur pour "balayer" tous les tuples, voici mon code

CREATE OR REPLACE FUNCTION stockerLesValeurs() RETURNS INTEGER AS
$$
DECLARE
	c_table CURSOR FOR SELECT resultat FROM multiplication;
	val table3.num3%TYPE;
BEGIN
	FOR val IN c_table LOOP
	 INSERT INTO table3(num3) VALUES(val);
	END LOOP;
	RETURN val;
END;
$$ LANGUAGE plpgsql;

Sous psql, j'ai le message suivant dès que j'invoque la fonction stockerLesValeurs()

initiation=# SELECT * FROM stockerlesvaleurs();
ERREUR:  la colonne « num3 » est de type integer mais l'expression est de type record
LIGNE 1 : INSERT INTO table3(num3) VALUES( $1 )
                                           ^
ASTUCE : Vous devez réécrire l'expression ou lui appliquer une transformation de type.
REQUÊTE : INSERT INTO table3(num3) VALUES( $1 )
CONTEXTE : PL/pgSQL function "stockerlesvaleurs" line 6 at instruction SQL

Je comprends bien qu'il s'agit d'un problème de conversion de type, par contre appliquer une transformation de type à l'expression. Comment procéder à cette opération?

Merci d'avance pour votre aide.
Sophonie.

#45 Re : PL/pgSQL » Fonctionnement des curseurs sous PL/pgSQL » 03/02/2010 15:52:14

Bonjour jpargudo,

jpargudo a écrit :

Votre problème est ici :

SELECT num2 FROM table2 WHERE num2 = val.num1

Si table2 contient des multiples de 12, l'égalité num2= val.num1 sera vraie tous les 12 tuples.

Je viens juste de me repencher sur les exercices en PL/pgSQL (priorités professionnelles) oblige
en fait implicitement vous m'apportiez la réponse, si la table contient des multiples de 12
alors il faut diviser par 12 la valeur récupérée par le curseur, ie num2 = val.num/12

J'attends votre retour pour les exercices d'approfondissement sur PL/pgSQL.

Merci encore.
sophonie.

#46 Re : PL/pgSQL » Fonctionnement des curseurs sous PL/pgSQL » 30/01/2010 13:54:08

Bonjour jpargudo,

Tout cela est effectivement à but pédagogique, et aura une finalité professionnelle à terme. Dans un premier temps, je constate que le problème provient de ma requête SQL.
Ce qui témoigne qu'apparemment, j'aurai "plus ou moins" compris le fonctionnement des
curseurs, des types de données, des valeurs retournés par une fonction dans PostgreSQL ...

Je n'en suis qu'à ma première semaine d'autoformation au PL/pgSQL et je souhaite continuer car c'est un langage passionnant avec une documentation riche.
Par contre, j'aurai souhaité savoir si vous disposez d'exercices pratiques sur le langage PL/pgSQL car je veux aller plus loin dans l'extrapolation de ce langage.

En effet, mon administration (un service d'inventaire patrimonial) à un projet de numérisation, de localisation de ses ressources dans une Base de données (j'ai choisi PostgreSQL et PostGIS).
Il nous faudra travailler avec un prestataire de services, en l'occurence Dalibo pour la partie administration du serveur, mais il faut un developpeur sur place (c'est à dire moi).
C'est pour cela que je me penche sur la question concernant ce projet de mise en oeuvre
d'une Base de données PostgreSQL.

Merci d'avance.
Sophonie.

#47 PL/pgSQL » Fonctionnement des curseurs sous PL/pgSQL » 29/01/2010 19:30:45

sophonie
Réponses : 4

Bonsoir à toutes et à tous,

J'ai crée 2 tables :
table1(num1 INTEGER)           table2(num2 INTEGER)

J'ai crée un script PL/pgSQL permettant de stocker dans table1 les nombres de 1 à 100,
et dans table 2 la "table de multiplication par 12" des nombres stockés dans table 1 (les nombres allant de 1 à 100).

J'ai crée une table "multiplication "
multiplication(resultat INTEGER)
Le but de cette table est de stocker la table de multiplication (le produit de chacun des
enregistrements clé par clé) des valeurs des tables table1 et table2.

Pour effectuer cette opération, j'ai utilisé un curseur, voici mon code

CREATE OR REPLACE FUNCTION stockerLesTables() RETURNS SETOF multiplication.resultat%TYPE AS
$$
DECLARE
	c_table CURSOR FOR SELECT num1 FROM table1;
	val multiplication.resultat%TYPE;
BEGIN
	FOR val IN c_table LOOP
	 INSERT INTO multiplication(resultat) VALUES (val.num1 * (SELECT num2 FROM table2 WHERE num2 = val.num1)); 
	END LOOP;
	RETURN NEXT val;
END;
$$ LANGUAGE plpgsql;

Lorsque j'exécute le script SQL en faisant \i monscript.sql tout ce passe bien, de même
que lorsque j'appelle la fonction stockerLesNombres().
Par contre lorsque je fais un SELECT * FROM multiplication;
J'ai bien 100 enregistrements mais seul 8 enregistrements sont récupérés ... les autres
valeurs sont vides.

Merci d'avance.
Sophonie.

#48 Re : PL/pgSQL » Débuter en PL/pgSQL » 22/01/2010 15:46:13

RAISE NOTICE 'bonjour nous sommes le  %', current_date;
et ça marche.

#49 PL/pgSQL » Débuter en PL/pgSQL » 22/01/2010 15:11:37

sophonie
Réponses : 1

Bonjour à toutes, et à tous,

Comme l'indique le titre de mon post, je débute avec le le langage de procédure de PostgreSQL.
J'ai lu une partie de la documentation (le strict minimun pour commencer à "mettre les mains dans le cambouis"). J'ai récupéré une série d'exercices afin de débuter en souplesse.
Je reste bloqué sur la première question me demandant de créer un script PL/pgSQL affichant :
Bonjour nous sommes le 22/01/2010.
Il y va de soi qu'il faut afficher la date du jour et pas le 22/01/2010 constamment, voici comment
j'ai procédé :
Je crée un fichier script1.sql via vim

CREATE OR REPLACE FUNCTION bonjour() RETURNS VOID AS
$$
BEGIN
         RAISE NOTICE 'Bonjour nous sommes le' || current_date ;
         RETURN;
END;
$$ LANGUAGE plpgsql;

Dans psql je fais un \i script1.sql qui m'affiche un message d'erreur
psql:script1.sql:7: ERREUR:  erreur de syntaxe sur ou près de « | »
LIGNE 4 :  RAISE NOTICE 'Bonjour nous sommes le' || current_date;

Comment se fait-il que je ne puisse pas utiliser l'opérateur || pour concaténer une chaîne de caractère
et la fonction current_date?

Merci d'avance.
Sophonie.

Pied de page des forums

Propulsé par FluxBB