Vous n'êtes pas identifié(e).
Je n'ai pas accès au serveur... J'avais joué avec les paramètres KEEPALIVES côté client mais sans succès.
Pour le moment, la seule solution satisfaisante que j'ai trouvé est le recours à pgAdmin Portable . Je n'ai plus de problème de re-connexion (plantage) lorsque la connexion est perdue.
Bonjour,
J'ai un souci avec pgAdmin III 1.20.0 (installation via l'exécutable postgresql-9.4.5-1-windows-x64.exe) sur Windows 7 / 64bit. La connexion se fait à une base de données sur serveur distant. Lorsque je laisse pgAdmin sans activité pendant une dizaine de minutes, la connexion est perdue. Une fenêtre me demande si je veux me reconnecter à la base. Que je clique oui ou non, pgAdmin plante et ferme... C'est très très lourd et je ne trouve pas de réponse. J'ai essayé de ré-installer pgAdmin séparément avec des versions différentes, sans succès. J'ai le message d'erreur suivant si j'accepte une aide au débogage :
Merci. J'y avais bien pensé mais la doc est complexe pour se former seul aux triggers (à mon sens)...
Bonjour,
Je dispose de deux règles sur une même table :
ON UPDATE TO table1 INSERT INTO table 2 ;
ON DELETE TO table1 INSERT INTO table2 ;
Je souhaiterais ajouter une règle :
ON INSERT TO table1 UPDATE table1 SET colonne = 'data' ... ;
Le problème rencontré est que l'UPDATE de la règle ON INSERT va déclencher la règle ON UPDATE... Comment contourner ce problème ? Existe-t-il un moyen de dire que dans le cas d'un INSERT, une autre règle est ignorée ?
Merci pour votre aide !
Thomas
Bonjour,
Je souhaite supprimer un schéma qui me semble obsolète dans une base de données de grande dimension qui en comporte une quarantaine. Je souhaiterais m'assurer que le schéma en question n'est pas appelé ailleurs dans la base, pour alimenter une vue dans un autre schéma par exemple. La commande « DROP SCHEMA mySchema » m'indique une liste de relations impactées si je supprime le schéma, mais la liste es trop longue.
ERREUR: n'a pas pu supprimer schéma my_schema car d'autres objets en dépendent
DETAIL: table my_schema.table1 dépend de my_schema
table my_schema.table2 dépend de my_schema
... etc ...
et 11 autres objets (voir le journal applicatif du serveur pour une liste)
Astuce : Utilisez DROP ... CASCADE pour supprimer aussi les objets dépendants.
Je ne sais pas comment trouver le journal applicatif. Sinon, une requête permettrait-elle d'afficher les dépendances du schéma à supprimer ?
Idéalement, je souhaiterais afficher les dépendances du schéma qui ne concerne pas ce schéma...
Merci pour votre aide et idée !
Thomas
Bonjour,
J'ai mis en place une règle pour mettre à jour une colonne NUM à partir d'une colonne CODE lors de l'insertion d'une nouvelle ligne (si CODE = 159990099, j'extrais NUM = 99) :
CREATE OR REPLACE RULE _insert_num AS ON INSERT TO maTable DO UPDATE maTable SET num = ltrim("substring"(code, 6, 4), '0') ;
Ainsi, à l'insertion d'une nouvelle ligne, l'UPDATE remet à jour la colonne NUM pour tous les enregistrements alors qu'il suffirait qu'il ne tourne que sur la ligne insérée. Je ne trouve pas de moyen de spécifier ça dans la règle...
Merci pour votre aide,
Thomas
En effet, je n'avais pas fais attention à ça... Merci !
Thomas
Bonjour,
Pourquoi est-ce que l'instruction suivante me renvoie FALSE ?
SELECT '[1-3]{5}' SIMILAR TO '22222' ;
Je ne comprends pas bien comment manier les regex avec la doc...
Merci pour votre aide !
Thomas
Bonjour,
J'ai trouvé :
CREATE OR REPLACE VIEW schema.vue AS (WITH table_temp AS (SELECT nom, prenom FROM table1 UNION ALL SELECT nom, prenom FROM table2) SELECT row_number() OVER () AS gid, * FROM table_temp) ;
Si ça peut servir...
Thomas
Bonjour,
Je créé une vue à partir d'une requête SELECT qui cumule dans le même tableau de résultat des lignes issues de deux tables différentes. Je souhaite ajouter une colonne ID qui numérote à partir de 1 chacune des lignes dans la vue. Y-a-t-il un moyen de passer tout ça dans la requête SELECT ?
Exemple, il faut pouvoir définir cette colonne à la place de GID en fin de requête :
CREATE OR REPLACE VIEW schema.vue AS (WITH table_temp AS (SELECT nom, prenom FROM table1 UNION ALL SELECT nom, prenom FROM table2) SELECT gid, * FROM table_temp) ;
Merci pour votre aide !
Thomas
Solution trouvée en supprimant la clause WHERE et en passant le filtre sur le code insee dans la jointure gauche directement :
SELECT
periode.libelle AS periode,
coalesce(sum(st_length(geo.the_geom)), 0) AS length
FROM periode
LEFT JOIN geo ON geo.date BETWEEN periode.debut AND periode.fin AND geo.insee = '086009'
GROUP BY periode.libelle, periode.gid
ORDER BY periode.gid DESC ;
Thomas
Les dates sont des entiers pleins, mais... je n'ai pas de colonne date dans ma table periode (cf. mon premier mail). Je ne comprends pas votre réponse de 10:14.
Heu... ça marche oui et non : la ligne « avant 1945 » est bien renvoyée mais les chiffres sortis sont aberrants... Je ne dois pas mélanger les dates non renseignées puisque je travaille justement sur les dates renseignées.
Je viens de tester, ça ne change rien... Je n'ai aucune ligne pour lesquelles le code insee n'est pas renseigné.
Oui bien sûr, ça donne ça (logique : la ligne vide correspond aux dates non reseignées) :
periode | length
----------------+-----------
| 87
2005 - 2014 | 103
2005 - 2014 | 56
1985 - 1994 | 18
1975 - 1984 | 5.7
1965 - 1974 | 5.3
1945 - 1964 | 0.2
Bonjour,
J'ai un souci avec une requête où le LEFT JOIN ne renvoie pas toutes les lignes de la table de gauche, mais ignore les lignes renvoyant une valeur nulle. La requête utilisée utilise une fonction PostGIS sur une colonne stockant de la géométrie mais ce n'est pas bloquant pour la compréhension, le problème étant du SQL pur à mon sens. Deux tables sont appelées :
- geo : gid, insee, date, the_geom
- periode :
gid | libelle | debut | fin
-------+----------------+---------+----------
1 | 2005 - 2014 | 2005 | 2014
1 | 1995 - 2004 | 1995 | 2004
1 | 1985 - 1994 | 1985 | 1994
1 | 1975 - 1984 | 1975 | 1984
1 | 1965 - 1974 | 1965 | 1974
1 | 1945 - 1964 | 1945 | 1964
1 | avant 1945 | 0 | 1944
SELECT
periode.libelle AS periode,
coalesce(sum(st_length(geo.the_geom)), 0) AS length
FROM periode
LEFT JOIN geo ON geo.date BETWEEN periode.debut AND periode.fin
WHERE geo.insee = '086009'
GROUP BY periode.libelle, periode.gid
ORDER BY periode.gid DESC ;
Résultat de la requête : il manque la ligne « avant 1945 » car aucune date ne correspond à cette tranche dans ma table geo.
periode | length
----------------+-----------
2005 - 2014 | 103
2005 - 2014 | 56
1985 - 1994 | 18
1975 - 1984 | 5.7
1965 - 1974 | 5.3
1945 - 1964 | 0.2
Si je supprime la clause WHERE, le problème n'existe plus puisque j'ai des dates renseignées pour chaque période (je récupère bien mes 7 lignes).
Problème SQL classique je pense, mais je ne vois pas pourquoi le LEFT JOIN ne retourne pas l'ensemble des lignes...
Merci pour votre aide !
Thomas
En effet, c'est la solution ! Merci damalaan.
Thomas
Bonjour,
Je me permets de relancer ce post car je m'arrache un peu les cheveux dessus. Merci damalaan pour ton lien mais ce n'est pas exactement ce que je cherche à faire... J'ai besoin de faire des regroupements par périodes (somme du linéaire pour la période 1945-1964, pour la période 1965-1980, etc.). L'exemple donné par damalaan permet de dénombrer des occurrences par valeur, mais pas par groupe de valeurs.
La solution que je donne est assez tirée par les cheveux. De plus, il suffit que je n'ai aucun objet daté dans une des périodes et cette période n'apparaît pas dans le résultat. Par exemple, si je n'ai aucun objet daté entre 1995 et 2004 dans ma table c_3_0_3, je vais avoir un résultat comme suit :
periode | pourcent
----------------+-----------
2005 - 2014 | 18.6
1985 - 1994 | 7.6
1975 - 1984 | 19.0
1965 - 1974 | 28.2
1945 - 1964 | 10.2
avant 1945 | 0.1
Merci encore pour vos avis !
Thomas
En effet... No comment.
Petite précision : dans l'arborescence de la base de données, quand je fais un clic-droit > supprimer sur la colonne, pgAdmin plante et je dois le fermer. Quand je relance et que je me connecte à ma BD, la colonne a bien été supprimée. Bon, je parviens à mes fins mais c'est un peu violent comme procédé et j'aimerais comprendre ce qui ne va pas...
Thomas
Voilà le résultat :
Colonne | Type | Modificateurs
-----------------+------------------------+-------------------------------------
gid | integer | non NULL Par dÚfaut, nextval('c_3_3_50_gid_seq'::regclass)
obj_matricule | bigint |
obj_orientation | double precision |
insee | character varying(10) |
cod_comp | character varying(256) |
coorgpsz | double precision |
coorgpsy | double precision |
coorgpsx | double precision |
travaux | character varying(256) |
nomcom | character varying(256) |
phitsta | character varying(10) |
marqcomp | character varying(256) |
aepcompt | character varying(10) |
idnum | integer |
ident | character varying(256) |
nocompt | character varying(256) |
obs | character varying(256) |
codetron | character varying(256) |
coderese | character varying(256) |
horser | character varying(10) |
datpose | integer |
comcod | character varying(256) |
nomsynd | character varying(10) |
the_geom | geometry(Point) |
id_editop | integer |
dossier_ | character varying |
niveau_ | character varying |
matricu_ | character varying |
datemaj | date |
ct_vente | character varying |
ct_achat | character varying |
posouvr | character varying |
Merci !
Bonjour,
Quelques recherches sur le Web ne me permettent pas de trouver réponse à ma question. Impossible de supprimer une colonne qui existe pourtant bel et bien dans ma table... L'instruction suivante me retourne le message qui suit :
ALTER TABLE aep.c_3_3_50 DROP COLUMN datmaj;
ERREUR: la colonne « datmaj » n'existe pas
********** Erreur **********
ERREUR: la colonne « datmaj » n'existe pas
État SQL :42703
Si quelqu'un a une idée, merci par avance !
Thomas
Après creusage du sujet, voici mes scripts fonctionnels :
1. Dump d'une table :
"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe" -h localhost -p 5432 -U postgres -v -f D:\test.sql -t schema.table database
2. Restauration de la table :
"C:\Program Files\PostgreSQL\9.2\bin\psql.exe" -h localhost -p 5432 -U postgres -d database -f D:\test.sql
J'ai solutionné le problème du password en configurant une nouvelle variable d'environnement PGPASSWORD (Panneau de configuration > Système > Paramètres système avancés > Variables d'environnement > Nouvelle).
Merci pour votre aide !
Thomas
Je ne peux rien taper dans la fenêtre cmd quand il me demande un mot de passe... Aucun caractère du clavier ne s'affiche à l'écran.
Bonjour,
Je cherche à créer un fichier BATCH pour sauvegarder de temps à autre une table afin de tester des modifications dessus, et pouvoir la restaurer si besoin. Je galère avec les lignes de commande mais je pense approcher du but. Quelqu'un peut-il me donner son avis sur le script suivant :
"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe" --host localhost --port 5432 --username postgres --format plain --ignore-version --verbose --file "C:\Users\UserName\Desktop\filename.backup" --table schema.table db_thomas
Bien sûr, je remplace UserName par le nom de mon répertoire et schema / table correspondent à un schéma et une table qui existent. J'exécute le fichier *.bat et la fenêtre Cmd me demande un mot de passe. Je ne peux pas taper de texte dans cette fenêtre donc je ne peux pas renseigner mon mot de passe... J'ai essayé de passer l'option --password dans ma ligne de commandes mais pg_dump me renvoie un message d'erreur "Trop d'arguments en ligne de commande". Je tourne un peu en rond...
Merci pour votre aide !
Thomas