Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » déclencher une requête à une heure précise chaque jour PostgreSQL » 15/11/2012 12:34:44
Chez nous, avec Ubuntu 12.04 et PG 9.1.6, j'ai un cron job qui tourne toutes les nuits pour nous faire des stats.
Je fais donc comme ceci ...
1. Cron pour lancer un fichier de commandes bash : postgresbatch.sh
crontab -l
00 22 * * 1-5 bash /home/xx/pgstuff/prod/scripts/bash/postgresbatch.sh # JOB_ID_1
2. Dans postgresbatch.sh, j'ai ceci
psql -f '/home/xx/pgstuff/prod/scripts/psql/psql stats batch.psqlb' -a -d pgbase >'/home/xx/pgstuff/prod/scripts/bash/psql.log' 2>&1
(qui lance psql avec (-f) un nom de fichier en argument, et stocke l'output de psql dans un fichier log psql.log)
3. Ce fichier : 'psql stats batch.psqlb' contient des commandes psql comme ceci
\echo `date`
\timing
\i '/home/xx/pgstuff/prod/scripts/psql/requete01.sql'
\echo `date`
\i '/home/xx/pgstuff/prod/scripts/psql/requete02.sql'
\echo `date`
...
\i '/home/xx/pgstuff/prod/scripts/psql/requete99.sql'
\echo `date`
4. \echo `date` permet de voir la date et l'heure de lancement de chaque requête dans le log et de répérer les fainéants
\i permet d'exécuter une requête
\timing ... err... je ne sais plus
5. pour finir, j'ai un alias : alias greperr='grep -i Error /home/xx/pgstuff/prod/scripts/bash/psql.log'
qui me permet de chercher des erreurs dans le fichier log, rapidos.
Voilà,
"Friendly" ,
Butin
#2 Re : Général » Créer un path à partir d'une base de points » 15/11/2012 10:43:35
Si vous avez des points vous avez sans doute une liste des coordonnées x et y.
Insérer ou importer votre liste dans Excel (ou Open Office Calc (je suppose)) et afficher la liste dans une graphique de type Ligne.
Vous verrez votre path.
Vous aurez peut être besoin d'utiliser l'option Inverser les Axes dans Excel.
Une autre solution ... SVG.
SVG est un format de fichier qui produit des images à partir de données. (Data driven documents)
Chercher dans le manuel online comment décrire un path et, à partir des exemples fournis, copier-coller vos données dans le ficher au bon endroit.
Inkscape (logiciel gratuit) permet d'afficher les fichiers SVG.
Voila,
Butin
#3 Re : Général » Utiliser un backslash dans une fonction PL/PGSQL » 15/11/2012 10:32:46
Parfait !
Merci,
Butin
#4 Général » Utiliser un backslash dans une fonction PL/PGSQL » 14/11/2012 19:38:01
- butin-matou
- Réponses : 2
Bonjour,
Comme d'autres avant moi, j'essaie d'ajouter une date au nom de fichier en sortie d'une commande COPY TO ...
J'ai compris qu'il faut passer par une fonction PL/PGSQL...
Ça marche, mais je voudrai que mon fichier soit exporté avec les options
with csv header
NULL AS '' et
DELIMITER AS E'\t' ' ;
Et là, tout marche bien aussi sauf que je n'arrive pas à maîtrise le syntaxe pour le DELIMITER AS E'\t' .
problème de backslash.
Quand je spécifie DELIMITER AS ''|'', tout fonctionne OK.
Voici une exemple qui fonctionne bien.
set standard_conforming_strings=on;
CREATE OR REPLACE FUNCTION copy_table_to_file(filename TEXT) RETURNS VOID AS
$$
BEGIN
EXECUTE 'COPY ma_table TO ''' || filename || ''' with csv header NULL AS '''' DELIMITER AS ''|'' ' ;
END;
$$
LANGUAGE 'plpgsql';
select copy_table_to_file('/home/csvstuff/ma_table_export_' || CURRENT_date::TEXT || '.txt');
A l'aide SVP pour le bon syntaxe.
Merci,
Butin
#5 Re : Général » Problème d'encoding » 23/09/2011 09:49:20
Bonjour,
Problème résolu.
J'ai redémarré le serveur Postgres
pour recharger la config que j'avais avant le problème (et
avant mes tentatives de correction). Mais le problème persistait.
Je savais au moins que le problème n'était probalement pas du coté serveur.
J'ai vu que les seuls tableaux Excel qui posaient problème
étaient ceux qui utilisaient des champs-contenant-des-accents
définies en dur dans les scripts SQL.
(Surtout des CASE WHEN ...)
Les tableaux qui lisaient directement des champs-de-la-base-contenant-des-accents
s'affichaient correctement.
En creusant, j'ai découvert que mon Notepad++
que j'utilise parfois pour modifier des scripts était règlé,
pour l'encodage, sur "Encoder en ASCII" .
J'ai modifié le paramètre en "Convertir en ASCII", et re-sauvegardé et relancé le script.
Les messages d'erreur ont disparu et l'affichage dans Excel est devenu normal, parfait.
Merci pour toutes vos suggestions.
BM
#6 Général » Problème d'encoding » 20/09/2011 11:08:59
- butin-matou
- Réponses : 5
Bonjour,
Mon travail se déroule en trois phases.
1. Je developpe et teste des requêtes SQL avec SqlDBX sous Windows.
2. Une tache cron éxécute ces requêtes SQL nuitamment utilisant des batches dans psql.
3. Ces batches créent des tables qui sont visualisables par mes collègues via des TCD dans Excel via ODBC.
Mais j'ai des messages d'erreur avec ce genre de requête :
CASE WHEN ... THEN 'Déséquilibré'
ELSE 'Equilibré' END AS Equilibre
Les lettres accentués posent problème.
Sous Windows avec SqlDBX 3.5.1 :
ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe92720;
Error while executing the query
Et avec psql :
ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe92720
Dans Excel, pas d'erreur d'accents, puisque la table de résultats n'est pas créée.
Comment faire pour que les lettres accentués français s'enregistrent et se voient correctement ?
1. dans mon requetteur client (SqlDBX) sous Windows et
2. dans psql et
3. dans Excel.
Merci d'avance pour toute aide.
BM
--------------------
pgsama=# \l
Liste des bases de données
Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d'accès
-----------+--------------+----------+------------+--------------+-----------------------
pgsama | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 |
postgres | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 |
template0 | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 lignes)
--------------------
Utilisant
Ubuntu 11.04 French
psql 9.0.3
SqlDBX 3.5.1
Win7 Pro French
#7 Re : Sécurité » COPY FROM - access denied » 13/05/2011 18:30:53
Et voila !
Nickel chrome.
Merci encore.
#8 Re : Sécurité » COPY FROM - access denied » 13/05/2011 17:56:55
Merci Marc,
Quand tu dis "créer un répertoire appartenant à ce groupe",
est-ce je dois comprendre
"modifier le répertoire existant pour qu'il appartienne (désormais) à ce groupe".
puisque mon répertoire existe déjà et la commande chown sert à modifier le propriétaire d'un répertoire existant.
Je n'ai jamais entendu parler du sgid.
Apparement, c'est exactement ce qu'il me faut,
puisque ce sont de nouveaux fichiers qui arrivent chaque nuit.
Merci ben gros.
Je te tiens au courant.
#9 Sécurité » COPY FROM - access denied » 13/05/2011 11:11:09
- butin-matou
- Réponses : 3
Salut,
Sur Ubuntu, 11,04, postgres 9,03
J'ai une tâche cron qui
- importe (lftp) des données CSV depuis une machine distante dans un dossier nommé "csvdata" dans ma home group.
- puis exécute psql pour créer des tables et fait un COPY FROM depuis les fichiers dans le dossier csvdata vers les nouvelles tables.
Quelle est la meilleure façon de refuser l'accès au dossier csvdata (et les fichiers de données) à tous les utilisateurs tout en permettant
l'accès pour moi et pour l'utilisateur postgres.
Le manuel dit que c'est le serveur qui doit avoir accès, mais je ne sais pas comment faire.
Je pensais qu'il serait bien si le dossier pourraient appartenir à un groupe et moi-même et postgres pourraient être membres de ce groupe ... ?
Crazy?
Serait-il préférable (plus simple) d'importer des données dans un dossier où le serveur a déjà des droits d'accès?
Et ce dossier serait-il renommé (ou autrement inaccessible) lors d'un upgrade de postgres?
TIA
butin-matou
#10 Re : Général » Remplir un champ par numérotation automatique » 21/03/2011 17:51:13
Ça devrait marcher (aux erreurs de syntaxe près, je n'ai pas vérifié ). Il y a juste une recopie de trop des données. Vous pourriez directement recopier dans la bonne table cible, plutôt que de recopier deux fois les données, je pense.
Justement, c'est là le problème.
Si je fais le tout "en une seule passe" le nextval('no_serie') est inséré avant le tri.
Du coup, il est lui même trié et perd son sens : il n'est plus du tout serial.
Avec le double recopie, le serial est ajouté après le tri et correspond, dans le cas cité, au row_number().
Je ne suis pas fort en SQL, mais ça à l'air de marcher.
#11 Re : Général » Remplir un champ par numérotation automatique » 21/03/2011 15:47:57
J'ai eu un problème similaire.
Je pense que je l'ai résolu ainsi.
Me gourre-je ?
DROP TABLE IF EXISTS table_b ;
SELECT
INTO table_b
FROM table_a
-- Faire le tri dès maintenant
ORDER BY
Is_Local_address DESC ,
UPPER(COUNTRY),
UPPER(POSTCODE),
UPPER(TOWN),
Name
;
DROP TABLE IF EXISTS table_c;
-- Drop la table avant de dropper la séquence
DROP SEQUENCE IF EXISTS Serial_number;
CREATE SEQUENCE Serial_number;
SELECT
-- Positionner le Serial N° comme colonne 1 puis ajouter tout le rest (*)
nextval('Serial_number') AS "Serial N°" , *
INTO table_c
FROM table_b;
;
SELECT * FROM table_c
Pages : 1