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 : Général » Schéma des relations » 19/10/2012 23:42:39

Georgie a écrit :

Ok, et est-ce que SQL Power Architect est un outil gratuit ?

Bonsoir, il me semble que suivre le lien donné te permettrai de ne pas poser la question !

@+

#27 Re : Migration » Transfert des données PostgreSQL-PostgreSQL » 19/10/2012 07:44:30

Bonjour, on doit même pouvoir faire cette opération à travers un pipe !

@+

#28 Re : Général » Import de données (text et csv) » 16/10/2012 14:49:26

Bonjour,
  n'oublions pas aussi que SQL est insensible à la casse, alors le camelcase dans le nom de table, je le sens moyen.

Cordialement

#29 Re : Général » Procédure avec utilisation de WITH » 13/04/2012 18:28:01

mystikilla a écrit :

WITH     tmp_table1 AS    (
                SELECT idauge
                FROM auges a
                WHERE idtypeauge=1
                ORDER BY idauge
            ),
    tmp_table2 AS    (
                SELECT idauge
                FROM auges
                where idauge not in (select idauge from tmp_table1)
                ORDER BY idauge
            )
SELECT idauge FROM tmp_table2

la requête ne pourrait elle pas être plus simple :

WITH tmp_table AS ( 
  SELECT idauge
  FROM auges 
  WHERE idtypeauge!=1
  ORDER BY idauge
)

ou être faite avec une une opération ensembliste ?

WITH tmp_table AS ( 
  SELECT idauge
  FROM auges 
 ORDER BY 1
 EXCEPT
 SELECT idauge
  FROM auges 
 WHERE idtypeauge = 1
)

Cordialement

#30 Re : Général » Export de données avec la commande COPY » 09/09/2011 18:44:55

gleu a écrit :

Je ne vois pas en quoi pgAdmin améliorerait la situation. Cependant, \copy (si utilisé à partir de psql) sera plus utile que COPY.

Peut etre parce que pgadmin permet de balancer le résulat d'une requête dans un fichier et que ce fichier peut etre sur le client à partir duquel on se connecte.

Mais, c'est vrai que \copy devrait suffire (comme d'habitude, j'utilise pgadmin).

Cordialement

#31 Re : Général » Export de données avec la commande COPY » 09/09/2011 01:19:58

Bonjour,
  dans ce cas la, pgadmin et "executer dans un fichier" pourrait être une bonne solution.

Cordialement

#32 Re : Général » DELETE avec ORDER BY et LIMIT... » 20/06/2011 06:49:20

Bonjour,
  une requête imbriquée ?

 DELETE FROM table WHERE id IN (SELECT id FROM table WHERE creator_id = 50 ORDER BY time_creation DESC LIMIT 50)

Attention, non testée.

Cordialement

#33 Re : Général » Backup de toutes les bases de données à chaque nuit sous Windows » 16/06/2011 07:25:48

Bonjour,
  Et dire que c'est si simple sous linux !

Cela dit, je garde le script sous le coude, ça peut resservir :-)

Cordialement

#34 Re : Général » Backup de toutes les bases de données à chaque nuit sous Windows » 15/06/2011 20:38:32

charleydc5 a écrit :

Oui je comprends très bien le fonctionnement. Par contre, j'aimerais rendre le tout dynamique, de sorte que si j'ajoute 5 bases de données demain, que le script puisse itérer dans toutes les bases de données du catalogue de PostgreSQL et ainsi faire la commande pg_dump pour chaque base de données.

J'utilise ce genre de méthode avec MSSQL et DB2 et cela ne requiert aucune maintenance de notre part. C'est vraiment génial!

HINT : psql -l (L minuscule)

je saurais faire en Linux, mais sous windows, je passe !

Cordialement

#35 Re : Général » Backup de toutes les bases de données à chaque nuit sous Windows » 15/06/2011 20:24:08

Bonsoir, dans le cas de Damalaan, "Indext" est le nom de la base à sauvegarder.

Donc, pour les bases "foo", "bar" et "truc", tu pourrais lancer les 3 commandes suivantes :

pg_dump -U postgres -f foo_save.sql foo
pg_dump -U postgres -f bar_save.sql bar
pg_dump -U postgres -f truc_save.sql truc

Je n'ai pas mis le port et l'host puisque par defaut à localhost et 5432.

Par contre, n'est ce pas super dangereux de réécrire une sauvegarde avec le même nom de fichiers que la précédente ?
Si des données sont effacées en masse (drop table, truncate, je ne sais quoi d'autres), on risque de flinguer la dernière sauvegarde valable, non ?

Sous linux, je ferais un truc du genre :

pg_dump -U postgres -f foo-`date +%Y%m%d%H%M`.sql foo

mais sous windows ?

Cordialement

#36 Re : Général » Requete imbriquée : Not IN » 28/04/2011 23:13:27

Bonsoir,
d'autant que ce n'est surement pas la meilleure façon de faire sa promo (trop voyant, trop arrogant à mon sens) et c'est d'autant plus dommage que les interventions de SQLprosont souvent intéressantes  (comme son site, voyez, je suis pas racunier, je fais de la pub) . Il manque juste un peu de forme.

C'est cette petite phrase

SQLpro a écrit :

Bref, apprenez SQL, mon livre comme mon site Web peuvent vous y aider !

qui gâche tout. Un peu trop sèche à mon gout.

Beaucoup ici, dont moi, sont là pour s'améliorer en Postgresql comme en SQL (et en orthographe, mais c'est un autre débat).

Cordialement

#37 Re : PHP » Nouveu base de données » 13/04/2011 17:18:19

Bonjour,
  accessoirement, une petite déclaration CNIL peut être utile !

Vous devriez aller jeter un oeil sur leur site.

Cordialement

#38 Re : PHP » requête récursive with » 07/04/2011 16:22:00

Bonjour,
  tu ne nous a pas dit de quelle distrib il s'agit (avec sa version), ça nous permettrai de t'orienter car l'idéal serait d'utiliser un rpm taillé pour ta distrib plutôt qu'un rpm générique.

Mais si l'install de la version 8.1 était d'origine, ça laisse présager qu'il s'agit d'une distribution un peu ancienne.

Tu peux déjà regarder par là : http://www.postgresql.org/download/linux

Sinon, pour une install générique : http://www.enterprisedb.com/products-se … pgdownload mais c'est pas la solution que je prendrais en premier.

Cordialement

#39 Re : Général » restore qui ne fonctionne pas » 06/04/2011 16:12:59

Bonjour,
  manifestement, la base de restauration n'a pas plpgsql d'activé !

http://docs.postgresqlfr.org/8.3/app-createlang.html

Cordialement

PS : pourquoi ne pas en profiter pour passer en 8.4 ? ou plus ?

#40 Re : PHP » requête récursive with » 06/04/2011 13:53:27

Bonjour, quel est la distribution linux utilisée ?
S'il s'agit d'une version grand public, il y a de forte chance que postgresql ait été installé par paquet (rpm si j'ai bien suivi).

Il suffit de mettre à jour les dépots, supprimer le vieille version de postgresql et en installer une plus à jour.

Pour la suppression, on peut toujours tenter : rpm -e postgresql-8.1.8

Mais les ditribs modernes ont en général un gestionnaire de package graphique maintenant.

Cordialement

#41 Re : Java » JDBC et WITH ... SELECT » 04/04/2011 16:30:31

Merci Marc,
  grâce a toi, j'ai pu constater que le problème ne venais pas du WITH !

Tout marche impec.

#42 Re : Java » JDBC et WITH ... SELECT » 04/04/2011 16:04:17

Le temps de trouver ou c'est loggué sous windows vista !

#43 Java » JDBC et WITH ... SELECT » 04/04/2011 15:37:59

meles
Réponses : 7

Bonjour,
  dans une application java (Eclipse BIRT) utilisant jdbc pour attaquer ma bdd (postgresql 9.0.2), je n'arrive pas a écrire une requete de la forme

 with temp as (select col1, col2 from plop) select * from temp

alors que la forme

select * from (select col1, col2 from plop) as temp

passe sans problème.

J'obtiens l'erreur suivante :

Caused by: org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « select »

Est-ce un pb connu avec JDBC ?

Je suis un peu perdu.

Cordialement

#44 Re : Général » formulaire sous postgres » 31/03/2011 23:42:21

Bon, avec libreoffice, ça marche nickel

Mode d'emploi:
LibreOffice Base -> se connecter à une BDD existante -> JDBC
puis:
url de la source de données : jdbc:postgresql://adresse:port/nomdemabase
classe de pilote JDBC : org.postgresql.Driver
puis paramétrer les mots de passes et autres fioritures
et le plus dur est fait :-)

Il faut avoir auparavant indiqué ou se trouve de driver jdbc dans :
Outils -> options -> Java -> Chemin de classe -> ajouter une archive (et aller sélectionner le fichier jar adéquat)

Voila une copie d'écran d'OpenOffice, qui est pareille :
oo_jdbcdriversetup.jpg

tirée de cette page

Cordialement

#46 Re : PL/pgSQL » Fonction concatenation » 15/02/2011 15:08:58

As tu pensé à modifier le nom de la fonction dans le déclaration du trigger ? (je dirais que oui)

En fait, c'est le lower qui plombe tout, puisque on se sert de firstname et lastname pour les retrancher de username, il faudrait déclarer comme ça (code non testé) pour que les 3 soit en minuscule (mais tu ne garde pas la casse d'origine de firstname, lastname) :

CREATE OR REPLACE FUNCTION lower_username()
RETURNS TRIGGER AS
$$
DECLARE
  tmp VARCHAR;
  cont integer;
BEGIN
  NEW.firstname := lower(NEW.firstname);
  NEW.lastname := lower(NEW.lastname);
  NEW.username := NEW.firstname||'.'||NEW.lastname;
  SELECT max(username) into tmp FROM plop where firstname = NEW.firstname and lastname = NEW.lastname;
  IF tmp IS NULL THEN
  -- ne rien faire
  ELSIF tmp = NEW.username THEN
    NEW.username := NEW.firstname||'.'||NEW.lastname||1;
  ELSE
    SELECT MAX(TRIM(username,(NEW.firstname||'.'||NEW.lastname))::INT)+1 INTO cont FROM plop where firstname = NEW.firstname and lastname = NEW.lastname and username != NEW.username;
    NEW.username := NEW.firstname||'.'||NEW.lastname||cont;
  END IF;
  RETURN NEW;
END
$$
LANGUAGE PLPGSQL;

Ou, on garde comme c'était (en fait on ne touche pas à la casse de firstname et lastname) :

CREATE OR REPLACE FUNCTION lower_username()
  RETURNS trigger AS
$BODY$DECLARE
  tmp VARCHAR;
  cont integer;
BEGIN
  NEW.username := lower(NEW."firstName"||'.'||NEW."lastName");
  SELECT max(username) into tmp FROM users where "firstName" = NEW."firstName" and "lastName" = NEW."lastName";
  IF tmp IS NULL THEN
  -- ne rien faire
  ELSIF tmp = NEW.username THEN
    NEW.username :=lower(NEW."firstName"||'.'||NEW."lastName"||'1');
  ELSE
    SELECT MAX(TRIM(username,(lower(NEW."firstName"||'.'||NEW."lastName")))::INT)+1 INTO cont FROM users where "firstName" = NEW."firstName" and "lastName" = NEW."lastName" and username != NEW.username;
    NEW.username := lower(NEW."firstName"||'.'||NEW."lastName"||cont::TEXT);
  END IF;
  RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql

PS : je ne suis pas sur que d'utiliser du "camelCase" et des "doubles quotes" pour le nom des colonnes améliore la lisibilité

#47 Re : PL/pgSQL » Fonction concatenation » 15/02/2011 14:24:10

Bonjour,
  je n'ai pas testé, mais j'aurais mis ceci :NEW.username := lower(NEW.firstname||'.'||NEW.lastname);
à la place de ça :NEW.lower(username) := NEW.firstname||'.'||NEW.lastname;
et ainsi de suite.


Ce serait bien de modifier aussi le nom de la fonction big_smile.

Cordialement

#48 Re : Général » Faire "copy from csv" qui effectue un "insert or ignore + update" » 07/02/2011 11:35:47

Bonjour,
si j'ai bien suivi, dans la table à mettre à jour, il peut y avoir des doublons d'ou le trigger, dont on a parlé tantôt, capable de générer des jean.dupont[1234]. Si on rajoute un jean dupont, comment sait-on que c'est un nouveau pour lequel il va falloir créer un jean.dupont5, ou un qui existe déjà ?

Cordialement

#49 Re : Général » rechercher une chaine de caractère dans une autre » 06/02/2011 23:35:23

damalaan a écrit :

Bonjour,
quand je demande de rechercher titi, je voudrais que ça me renvoie les enregistrements 1, 2 et 3
quand je demande toto ou tutu, je voudrais le 1 et le 3

Tu voulais sans doute écrire : quand je demande de rechercher titi, je voudrais que ça me renvoie les enregistrements 1, 2, 4 et 5, quand je demande toto ou tutu, je voudrais le 1, 3 et 5 !

Sinon, pareil que Marc, je vois pas ce qui ne marcherait pas, c'est une syntaxe que j'utilise régulièrement sans problème.

Cordialement

#50 Re : Général » Faire "copy from csv" qui effectue un "insert or ignore + update" » 06/02/2011 23:30:46

Bonne nuit big_smile,
  y'a quand même un truc qui me turlupine dans cette histoire,  c'est que si j'ai bien suivi, le fichier CSV qui sert à alimenter la table est alimenté en permanence. Que ce passera-il si le COPY des données dans postgresql se passait en court d'écriture de données dans ce fichier? Ne risquerait on pas de se retrouver avec des données corrompues.

Bref, je trouve cette histoire risquée. De plus, si l'idéee est d'alimenter postgreql en continu, pourquoi ne pas écrire les données directement dans les tables au fur et à mesure plutôt que de passer par un fichier CSV intermédiaire.

Avez vous la main sur l'application qui écrit ses données en continues dans le CSV ? Est-ce que ça ne vaudrais pas le coup de passer par un ETL (talend au hasasrd) pour charger ces données.

Bref, on en sait vraiment pas assez pour donner des pistes.

Cordialement

Pied de page des forums

Propulsé par FluxBB