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

#52 Général » Est-ce que l'instruction TRUNCATE TABLE est synchrone ? » 24/09/2013 10:41:10

guk92
Réponses : 2

Bonjour,


Je souhaiterais savoir si l'instruction TRUNCATE TABLE est synchrone (ou asynchrone) .
Je m'explique, je souhaiterais exécuter TRUNCATE TABLE sur une table, et tout de suite après effectuer des insertions (INSERT INTO).
Mais est-ce que l'insertion sera faite sur une table vide, ou bien une table qui est en train de se vider ?


Cordialement,

#53 Re : ODBC » Bug ODBC "Connection already in use" + solution temporaire » 05/09/2013 09:35:24

guk92 a écrit :

Même après un redémarrage, le problème persiste malheureusement.

Oui un redémarrage du poste.


La meilleure chose à faire je pense, c'est d'essayer de reproduire le problème sur mon poste.
Puis d'installer la version la plus récente d'ODBC pour PostgreSQL (version du 3 juin), puis essayer de nouveau de reproduire le problème sur mon poste.


Cordialement,

#54 ODBC » Bug ODBC "Connection already in use" + solution temporaire » 04/09/2013 11:00:23

guk92
Réponses : 2

Bonjour,


J'ai installé la version PostgreSQL 9.2 sur une machine et j'utilise actuellement le pilote ODBC PostgreSQL suivant pour me connecter au serveur :
psqlodbc_09_01_0200.zip    Aug. 20, 2012, 3:50 a.m.    4.2 MB


Une personne a laissé son logiciel client ouvert avant de partir, mais sa machine (Windows 7) s'est éteinte automatiquement de nuit.
A son retour le lendemain, il ne pouvait plus établir de connexion avec le serveur et un message d'erreur lié aux "socket" est apparu, accompagné d'un "Connection already in use".
Même après un redémarrage, le problème persiste malheureusement.


J'ai donc regardé du coté du serveur si sa machine était toujours connectée (pg_stat_activity), elle n'était pas présente dans la liste, donc elle n'était pas connectée au serveur.


De mon coté, sur mon poste client, avec les mêmes logiciels clients (il y en a plusieurs) => pas de problème, j'arrive à me connecter.
Le problème ne pouvait donc venir que de son poste client, et plus précisément de son pilote ODBC.


Après une réinstallation du .MSI (exécutable du pilote ODBC), le problème a été résolu.


Pensez-vous qu'il y ait un meilleur moyen de résoudre ce genre de problème ?
Je ne pense pas qu'on puisse se permettre de réinstaller l'exécutable du pilote ODBC à chaque fois qu'une personne laisse un logiciel client allumé et que le poste s’éteint.




Cordialement,

#55 Re : Général » [ODBC] Cacher tables et vues non accessibles » 03/09/2013 14:16:15

Les logiciels clients sont propriétaire (ex: Excel, Crystal Reports etc...), du coup il n'est pas possible de les modifier.
Il y a une petite perte de confidentialité, c'est dommage.

Sujet résolu. Merci smile

#56 Re : Général » [ODBC] Cacher tables et vues non accessibles » 03/09/2013 09:56:16

Le problème ne peut pas venir du logiciel client. Les logiciels client ne font que se servir d'ODBC, librairie fournit par PostgreSQL, donc tous les logiciels client afficheront toutes les tables et vues existantes dans une base.

C'est le serveur qui donne les informations concernant la base. Donc normalement, si le problème peut être résolu, c'est du coté de PostgreSQL qu'il faut configurer.

Cordialement,

#57 Général » [ODBC] Cacher tables et vues non accessibles » 02/09/2013 14:35:48

guk92
Réponses : 6

Bonjour,

Dans une base (schéma public par défaut), j'ai créé de nombreuses tables et vues.
J'ai aussi créé plusieurs comptes spécifiques (lecture à certaines tables, lecture et écriture à d'autres tables).
Sauf que lorsqu'un utilisateur se connecte via un logiciel client utilisant ODBC, il peut voir toutes les tables et vues qui existent dans cette base, même s'ils n'ont aucun droit dessus.

Comment faire pour que ne soit affiché que les tables et vues auxquels l'utilisateur peut avoir un accès ?


Cordialement,

#58 Re : Général » Client ODBC 32bits avec Serveur 64bits possible ? » 08/07/2013 16:23:50

Ah d'accord, c'est une très bonne chose parce que je suis obligé de rester sur du ODBC 32bits sur le poste client et j'aimerais profiter de la puissance de la version 64bits de PostgreSQL sur le serveur.

Je met le sujet en résolu.

Merci Julien.

#59 Général » Client ODBC 32bits avec Serveur 64bits possible ? » 08/07/2013 15:08:13

guk92
Réponses : 2

Bonjour,

En ce moment j'ai un poste client où j'ai une version 32bits d'ODBC.
Je souhaiterais savoir si je peux me connecter à un serveur PostgreSQL 64bits avec ODBC 32bits (migration de serveur 32bits -> 64bits).


Est-ce que ODBC utilise les sockets ? Si c'est le cas je me dis que ça doit surement fonctionner.
Si ce n'est pas possible je serai obligé d'installer une version 32bits de PostgreSQL sur un serveur avec un OS 64bits (dommage non ?).

Cordialement,

#60 Re : Installation » Problème installation sur XP SP2 » 27/06/2013 10:07:17

@28marc28 : "J'ai installé le 3.0 puis le 3.1 et pour finir le 4.5, puis RE BOOT et cela fonctionne."


On dirait l'installation successive de patch pour Call of Duty premier du nom big_smile


Je pense que le framework .NET a besoin du "Microsoft Visual C++ 20xx (x86 ou x64) Redistributable". En faite je suppose que votre Windows XP SP2 ne possédait pas la bonne version du "Microsoft Visual C++ 20xx (x86 ou x64) Redistributable" pour PostgreSQL. Mais lorsque vous avez installé le framework .NET adéquat, celui-ci a téléchargé le "Microsoft Visual C++ 20xx (x86 ou x64) Redistributable" qui fonctionne avec PostgreSQL 9.2


PS: Le framework .NET est inclus par défaut dans Windows que depuis Windows Vista, avec la version du framework .NET 3.0 (lien).

#61 Re : Installation » Problème d'installation de PostgreSQL 9.2 (32 bits) sur W7 » 25/06/2013 17:50:30

Bonjour,


J'ai lu ces trois chapitres mais je n'ai toujours pas compris le rapport.


En faite mon problème, si j'ai bien compris, c'est que je ne peux pas passer par l'installation ".exe" car je ne dispose pas des droits nécessaire pour que l'installateur crée un Service c'est bien ça ?


Mais pourquoi l'installateur ne vérifie pas avant installation que j'ai bien tout les droits pour installer PostgreSQL correctement ? hmm


PS: De plus je suis allé dans le dossier C:\Program Files (x86)\PostgreSQL\9.2\data\pg_log mais je n'ai pas trouvé de "install-postgresql.log" pour voir où l'installation bloque exactement.


Merci

#62 Re : Installation » Problème installation sur XP SP2 » 25/06/2013 17:45:58

Il me semble que le framework .NET est installé par défaut sur les machines Windows.
Avoir "Microsoft Visual C++ 20xx (x86 ou x64) Redistributable" j'aurais compris par contre je suis surpris de voir que PostgreSQL utilise le framework .NET ...

#63 Re : Installation » Problème d'installation de PostgreSQL 9.2 (32 bits) sur W7 » 19/06/2013 09:42:28

Bonjour,

En effet, lorsque je lance pgadmin3 et services.msc, je ne vois aucun service PostgreSQL dans la liste.
Je suis allé voir votre lien mais je ne vois nulle part l' "installation manuelle", pourrais-je avoir plus de précisions ?

Merci smile

#64 Installation » Problème d'installation de PostgreSQL 9.2 (32 bits) sur W7 » 18/06/2013 01:23:41

guk92
Réponses : 5

Bonjour,


J'ai voulu installer PostgreSQL 9.2 (32 bits) sur un poste Windows Seven en entreprise, mais je rencontre le même problème que Aede.
A chaque fois que je tente de réinstaller PostgreSQL, j'ai ce message d'erreur :
config posgresql


J'ai remarqué que le fichier postgresql.conf et pg_hba.conf étaient absent du dossier data :
1. Je suis donc allé dans le dossier share, j'ai effectué un copier/coller de ces deux fichiers en enlevant l'extension ".sample" dans data.
2. J'ai dé-commenté la ligne du localhost et le numéro de port par défaut (5432) pour le fichier postgresql.conf.
Enfin j'ai redémarré le poste pour que tout cela prenne effet.


Voici ce que j'ai maintenant :
1371510636-probleme-postgresql.png

Pourquoi est-ce que j'ai un problème de socket TCP/IP ? Est-ce que le "firewall" de la machine peut empêcher PostgreSQL de fonctionner correctement même en localhost ?


Petites précisions :
1. Je ne possède pas un compte full admin. Je possède un login/mdp admin qui me permet d'exécuter des ".exe" ou déplacer des fichiers dans C:\ (rappel: machine bridée d'entreprise), mais je ne pense pas pouvoir faire mieux.
2. Par rapport au sujet de Aede, mes identifiants d'accès au poste W7 ou à PosgreSQL ne possèdent pas d'accent.


Je vous remercie pour votre aide smile

#65 Sécurité » Compte utilisateur ne pouvant faire appel qu'aux procédures stockées » 28/03/2013 21:07:02

guk92
Réponses : 1

Bonsoir,

Je souhaiterais créer une application desktop (client lourd), pour des raisons de sécurité je pense utiliser des procédures stockées (FUNCTION).
Pourriez-vous me dire comment créer un compte PostgreSQL limité qui ne peut que faire appel à des procédures stockées ?

Ce compte ne pourra exécuter aucune requête, il ne pourra pas faire de : CREATE, SELECT, INSERT|UPDATE|DELETE.
Bien sur la procédure stockée appelé pourra contenir des SELECT, INSERT|UPDATE|DELETE.

Connaissez-vous un moyen plus sécurisé de communiquer avec un SGBD pour une application desktop ?


Cordialement,

Merci.

#66 Re : Général » Deux BEGIN dans une fonction » 13/11/2012 08:28:44

D'accord, je m'en doutais un peu mais je voulais être sur, merci !

PS: on aurait pu l'appeler TRY wink

#67 Général » Deux BEGIN dans une fonction » 12/11/2012 21:18:05

guk92
Réponses : 2

Bonsoir,

Dans un précédent topic j'avais demandé si on ne pouvait pas faire de transaction dans une procédure (fonction) PostgreSQL, et c'est alors que j'avais reçu une réponse clair et net :

gleu a écrit :

PostgreSQL ne gère pas les sous-transactions et une fonction est en elle-même une transaction. Donc, non, pas possible de faire de COMMIT dans une fonction.

J'en avais déduis qu'on ne pouvais pas créer plusieurs BEGIN dans une fonction, mais en lisant la documentation officielle j'ai vu :

CREATE TABLE db (a INT PRIMARY KEY, b TEXT);

CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
$$
BEGIN
    LOOP
        -- first try to update the key
        UPDATE db SET b = data WHERE a = key;
        IF found THEN
            RETURN;
        END IF;
        -- not there, so try to insert the key
        -- if someone else inserts the same key concurrently,
        -- we could get a unique-key failure
        BEGIN
            INSERT INTO db(a,b) VALUES (key, data);
            RETURN;
        EXCEPTION WHEN unique_violation THEN
            -- Do nothing, and loop to try the UPDATE again.
        END;
    END LOOP;
END;
$$
LANGUAGE plpgsql;

SELECT merge_db(1, 'david');
SELECT merge_db(1, 'dennis');

J'ai testé ce code et bien sur il compile, mais pourquoi et à quoi sert le BEGIN qui se trouve après le END IF ?
Je pensais qu'on ne pouvais pas créer de transaction dans une fonction, comment se fait-t-il qu'il n'y ait pas d'erreur ?

Cordialement,

#68 Général » pgAgent pour les tâches planifiée » 11/11/2011 16:29:59

guk92
Réponses : 1

Bonjour,

Je sais qu'il existe pgAgent pour créer des tâches planifiées sous PostgreSQL.
Je souhaiterais simplement exécuter une procédure qui dé-bannit les utilisateurs qui ont étés bannit temporairement.

Il est dit sur PgAdmin.org que :

pgAgent runs as a daemon on *nix systems, and a service on Windows systems. In the majority of cases it will run on the database server itself - it is for this reason that pgAgent is not automatically setup when pgAdmin is installed.

Je trouve cela dommage qu'il ne soit pas installé par défaut.


J'ai donc suivis les instructions pour installer pgAgent mais je dois mal m'y prendre :

C:\Program Files\PostgreSQL\9.0\pgAdmin III\pgAgent>"C:\Program Files\PostgreSQL\9.0\pgAdmin III\pgAgent" INSTALL pgAgent -u postgres -p secret hostaddr=127.0.0.1 dbname=pgadmin user=postgres
'"C:\Program Files\PostgreSQL\9.0\pgAdmin III\pgAgent"' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

C:\Program Files\PostgreSQL\9.0\pgAdmin III\pgAgent>INSTALL pgAgent -u postgres
-p secret hostaddr=127.0.0.1 dbname=pgadmin user=postgres
'INSTALL' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

Autrement j'ai donc suivis le tutoriel suivant pour installer pgAgent sur : http://pabloj.blogspot.com/2008/03/pgag … usage.html

Je bloque à l'étape 4 car je n'ai pas le script pgagent.sql dans le chemin suivant chez moi :
C:\Program Files\PostgreSQL\9.0\scripts


Merci smile

#69 Re : Général » trouver une bourse de formation en administration de la bdd postgres » 11/11/2011 15:40:04

Il existe des formations PostgreSQL ?
Un diplôme d'école en informatique n'est pas suffisant ?

#70 Re : Java » Retourner plusieurs lignes d'une table grace à une procédure stockée » 29/10/2011 12:56:06

Oui, mais je pense avoir trouvé mieux ici.
La solution RETRUN SETOF est trop lourde à mettre en place.

Je te remercie !

#71 Java » Retourner plusieurs lignes d'une table grace à une procédure stockée » 25/10/2011 15:31:35

guk92
Réponses : 2

Bonjour,

J'ai voulu créer un programme de test dans lequel j'affiche le contenu de ma table en utilisant une procédure stockée, le problème est que je ne reçois qu'une seule ligne sur les 200 de ma table !

Voici mon code Java :

System.out.println("---Début test---");
CallableStatement call = con.prepareCall("{call p_maProcedureT1()}");
call.execute();
ResultSet resultat = call.getResultSet();
 
while(resultat.next()){
	System.out.println("Colonne 1 : " + resultat.getInt(1) + " Colonne 2 : "+ resultat.getInt(2));
}
resultat.close();
call.close();
System.out.println("---Fin test---");

Voici l'affichage console :

---Début test---
Colonne 1 : 176 Colonne 2 : 1
---Fin test---

Je me suis rendu compte qu'en ajoutant un ORDER BY id à ma procédure que je recevais la première ligne de la table, mais ça s'arrête là, je ne reçois qu'une seule ligne sur les 200 de ma table.

Voici ma procédure PL/pgSQL :

CREATE FUNCTION p_maproceduret1(out identifiant integer, out valeur integer)
AS
$BODY$
BEGIN
 
SELECT id, vala INTO identifiant, valeur FROM t1 ORDER BY id;
 
END;
$BODY$
LANGUAGE plpgsql;

Je me sers de variable en mode OUT pour récupérer mes résultats et sans mettre les "?" dans :

CallableStatement call = con.prepareCall("{call p_maProcedureT1()}");

Je sais que ça paraît bizarre mais ça fonctionne et je n'ai pas réussis à faire autrement bien que j'ai suivi le tutoriel Callable Statement.

1. Peut-on retourner plusieurs lignes d'une table à partir d'une procédure stockée ?
2. D'où pourrait venir mon problème ? (coté Java ou PostgreSQL)
3. Est-ce que je me suis trompé dans la syntaxe ?
4. Pourriez-vous me montrer un exemple simple pour l'affichage de mes 2 colonnes avec une procédure ?


Je ne sais plus trop quoi faire, je suis sur ce problème depuis plusieurs jours sad


Je vous remercie pour votre aide. smile

#72 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 22/10/2011 01:54:32

Merci Gleu, les deux premières réponses répondent en faite à la troisième question.
Je cherchais en faite à récupérer plusieurs valeurs d'une requêtes lors d'un appel de procédures stockées dans un programme codé en PHP (voir exemple n°4 et 5).
J'ai déjà vu des exemples avec une seule valeur, mais je ne connaissais pas la syntaxe lorsqu'on a plus d'une valeur.
Je vais donc tester cela (SELECT ... INTO).

Je vous remercie pour toutes ces réponses. smile

#73 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 21/10/2011 16:59:34

Merci à tous pour vos réponses big_smile

En effet DO est très pratique pour faire du PL/pgSQL sans avoir à créer de fonction.
La syntaxe pour faire du C me paraît un poil compliqué, je m'y lancerais dedans si c'est vraiment nécessaire un jour.

Pour ce qui est du SQL/PSM j'ai voulu m'intéresser à sa syntaxe de plus prêt en consultant la doc MySQL... pas terrible en faite :
- Pour ce qui est des conditions IF / ELSIF / ELSE, c'est la même chose que le PL/pgSQL (avec "ELSEIF" et pas "ELSIF").
- Pour le WHILE il suffit juste de remplacer LOOP [...] END LOOP du PL/pgSQL par DO [...] END WHILE.
- La syntaxe du LOOP est vraiment nulle, vous devez impérativement créer un label pour quitter une boucle infinie avec la commande LEAVE label, en PL/pgSQL EXIT suffit.
- Il n'y a pas de boucle FOR, celui-ci est remplacé par un équivalent : REPEAT
- Une nouvelle instruction apparait, ITERATE : "Refaire une boucle" WHILE | REPEAT | LOOP en cours lorsqu'une condition est vraie.
- Pour tout les boucles (WHILE | REPEAT | LOOP) il est possible de créer des labels, je pense que c'est même conseillé.
- L'instruction CASE reste identique
- Enfin, comme avec le T-SQL, il existe une syntaxe pour les procédures et une autre pour les fonctions.


Par contre j'aurais une dernière question, concernant les variables dans les procédures, en faite j'ai voulu créer un petit programme utilisant une procédure stockée qui contient une requête (je souhaiterais donc récupérer la valeur de plusieurs colonnes d'une requête), j'ai donc fais ceci :

DO $$
DECLARE var1 integer;
DECLARE var2 integer;
BEGIN
SELECT MIN(val) INTO var1 FROM t1; -- Pas d'erreur
SELECT MIN(val) INTO var1, MAX(val) FROM t1; -- Pas d'erreur
SELECT MIN(val) INTO var1, MAX(val) INTO var2 FROM t1; -- ERREUR
END;
$$

Donc je ne peux pas faire de SELECT... INTO plus d'une seule fois !
J'ai aussi essayé avec l'affectation ( := ) mais ça ne fonctionne pas.

J'ai donc vu cette exemple sur internet.
6. Peut-t-on réellement mettre en paramètre d'une fonction le nom des colonnes d'une requête comme dans l'exemple?
(c'est la première fois que je vois cette manière de procéder).
7. Quel est la syntaxe à adopter pour créer une procédures stockées contenant une requête dont les valeurs des colonnes vont servir dans un programme (Java, PHP, Python etc...) ?


Je vous remercie smile

#74 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 20/10/2011 23:27:28

Rjuju a écrit :

c permet d'avoir un gros gain de performance [...] code compilé

Moi je pensais que tout ces langages qu'on utilisait pour créer une fonction ou procédure PostgreSQL étaient interprétés et donc tous équivalent...

Rjuju a écrit :

on perd une certaine souplesse, code compilé spécifique à une plateforme, il faut recompiler pour en changer voire faire des adaptations

Mon maitre d'apprentissage m'avait dit que les SGBD avait un "OS" en interne (et donc qu'avec un peu de débrouillardise on pourrait même avoir "SQL Server sous du Linux" par exemple hmm ), il disait souvent des bêtises et j'en ai hérité aussi big_smile
4. N'est ce pas PostgreSQL qui "compile" le code en interne du coup ? (toute plateforme confondu)


Avant de m'attaquer au PL/pgSQL, je m'étais d'abord intéressé au C (vu que je connaissais le C), mais je me suis très vite perdu.
5. Pourriez-vous me montrer un exemple simple de CREATE FUNCTION en C qui contient une requête SQL ?
J'en ai malheureusement pas trouvé sur internet.


Merci smile

#75 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 20/10/2011 22:04:00

Oui c'est habituellement ce que je fais, j'utilise un éditeur de texte coloré (très pratique), j'utilise aussi les symboles $ pour créer ou remplacer une fonction.

Au début, quand j'ai vu l'erreur, je me suis posé des questions parce qu'on peut coder en T-SQL sans créer de fonction sous SQL Server, mais après j'ai compris hmm


1. J'ai vu que PostgreSQL permettait de coder en C, Perl, Python etc... y a t-il beaucoup de personne codant avec ces langages ?
Je veux dire par là que bien que je sache coder en C par exemple, je ne l'utiliserais pas pour créer des fonctions, j'utiliserais sans hésiter le PL/pgSQL.

J'ai lu quelque part qu'il existait le SQL/PSM, je connais très peu d'information là-dessus, je sais juste que c'est un langage normalisé (en 2003, donc récent) et qu'il était équivalent au T-SQL / PL/SQL / PL/pgSQL.

J'ai trouvé ce document qui parle du SQL/PSM, et j'ai été étonné de voir que c'est MySQL qui l'implémente (moi qui cherchait à connaitre le nom du langage utilisé par MySQL je ne suis pas déçu big_smile ).

Pour finir j'ai lu cette autre lien, qui dit que PostgreSQL implémente ce langage depuis 2007 (c'est très récent), mais je n'ai rien vu de tel sur internet.


2. J'ai trouvé très peu d'information sur le SQL/PSM. Pourquoi parles-t-on très peu du SQL/PSM ?
3. Est-ce que PostgreSQL intègre ou va intégrer ce langage ? (car je sais que PostgreSQL respecte au mieux les normes)
    Si oui, va-t-on continuer avec le PL/pgSQL ou mettre en avant le SQL/PSM ?

Ce qui pourrait être pratique avec un langage normalisé tel que le SQL/PSM, c'est que nous n'aurions pas autant de langages, je ne vous cache pas que ça commence à devenir très commercial entre T-SQL, PL/SQL, Progress etc... yikes


Merci smile

Pied de page des forums

Propulsé par FluxBB