Vous n'êtes pas identifié(e).
Marc,
J'ai modifié le pg_hba.conf avec les 2 lignes que vous avez donné.
Dans les logs, j'ai ceci :
3602 2011-05-09 10:22:01 CEST 46 LOG: received SIGHUP, reloading configuration files
3602 2011-05-09 10:22:01 CEST 47 LOG: authentication option not in name=value format: sameuser
3602 2011-05-09 10:22:01 CEST 48 CONTEXT: line 75 of configuration file "/home/postgres/PG_DATA/pg_hba.conf"
3602 2011-05-09 10:22:01 CEST 49 LOG: authentication option not in name=value format: sameuser
3602 2011-05-09 10:22:01 CEST 50 CONTEXT: line 76 of configuration file "/home/postgres/PG_DATA/pg_hba.conf"
3602 2011-05-09 10:22:01 CEST 51 WARNING: pg_hba.conf not reloaded
J'ai trouvé la commande pour enlever le mot de passe :
ALTER ROLE postgres WITH PASSWORD NULL;
Mais il me demande toujours un mot de passe à la connexion et lorsque je ne met rien, j'obtiens le message d'erreur :
psql: fe_sendauth: no password supplied
Au secours.
Bonjour à tous,
Merci Marc pour la réponse, j'ai suivi votre conseil.
J'ai modifié le password de mon Utilisateur Système postgres.
J'ai modifié mon pg_hba.conf (local all postgres ident sameuser) pour tester les connexions locales. J'ai ensuite fait un "pg_ctl reload". La connexion fonctionne.
J'ai mis le même password à mon Utilisateur PostgreSQL postgres, que mon Utilisateur Système, pour voir le comportement.
Maintenant il me demande le password à la connexion (psql [DBNAME]), malgrès le "ident sameuser".
Comment faire pour qu'il ne me demande pas ce password ? ou quelle est la commande pour l'enlever ?
Merci pour votre aide.
Rebonjour,
Je me permets de faire remonter ce post pour vous dire que j'ai modifié le paramètrage mémoire du moteur PostgreSQL et que maintenant les tâches de maintenance se déroulent sans problème.
shared_buffers = 50000
work_mem = 10240
maintenance_work_mem = 262144
Merci pour votre aide.
Bonjour à tous,
Je travaille sur des bases supérieures à 8.0 sous Red-Hat et Cent-OS.
L'installation est faite avec un Utillisateur Système "postgres"
Le fichier postgresql.conf contient le paramètre : listen_addresses = '*'
Le fichier pg_hba.conf est configuré :
local all all trust
host all all IP MASK trust
host all all ::1/128 trust
Est-ce que tout le contenu de la BD appartient à ce "Super-Utilisateur" PostgreSQL de même nom que l'Utilisateur Système ?
Ce "Super-Utilisateur" PostgreSQL a t'il un mot de passe ? Est-ce le même que celui de l'Utilisateur Système ?
Pour mettre en place la sécurité, nous souhaitons :
- changer le mot de passe du "Super-Utilisateur" que tout le monde connait à présent.
Est-ce possible ? et quel impact ?
- créer de nouveaux utilisateurs PostgreSQL en adéquation avec nos applicatifs.
Faut-il utiliser les commandes CREATE ROLE ?
Y-a-t'il des GRANT à faire pour que ces utilisateurs puissent faire des insert/update/delete ?
- restreindre l'accés à la base de données à certains postes clients uniquement.
Est-ce bien au niveau du pg_hba.conf qu'il faut donner la liste des postes, avec nom de base de données et password ?
- restreindre les actions dans la base de données (accés à certaines tables, delete interdit sur certaines tables, ...).
Est-ce que cela se gère également avec les GRANT ?
Globalement est-ce une bonne première approche pour gérer la sécurité ?
Je sais cela fait beaucoup de questions, mais nous n'avions, jusqu'à aujourd'hui, aucun besoin de sécurité.
J'ai déjà pas mal lu de documentation PostgreSQL, si vous voulez bien juste m'aiguiller.
Je vous remercie par avance.
Ok effectivement les paramètres sont loin d'être ceux préconisé dans l'article de LinuxMag 131 que j'ai lu.
Je vais planifier un arrêt/modification des paramètres/redémarrage du serveur.
Je vous ferai part des résultat aprés modif et exécution du script posant problème.
Merci pour votre aide.
Bonjour Guillaume,
Les valeurs des paramètres sont :
shared_buffers=50000
work_mem=1024000
maintenance_work_mem=1024000
max_connections=100
Oui le serveur est dédié à PostgreSQL.
Merci pour votre aide.
Bonjour à tous,
J'ai une BD de production en PostgreSQL 8.1.2 sous White Box 4.
Je rencontre le message d'erreur ci-dessous lors de l'exécution d'un script qui effectue les tâches suivantes :
vacuumdb -a -f -z
reindexdb -a
reindexdb -s
2011-04-03 12:48:51 CSTERROR: out of memory
2011-04-03 12:48:51 CSTDETAIL: Failed on request of size 67108864.
2011-04-03 12:48:51 CSTSTATEMENT: REINDEX DATABASE geo;
La machine dispose de :
MemTotal: 2075012 kB (grep MemTotal /proc/meminfo)
SwapTotal: 4096564 kB (grep SwapTotal /proc/meminfo)
Quelle peut être la source du problème ?
Merci pour vos réponses.
Vous avez raison, ce peut être dangereux.
Par contre, je suis certains que personne n'est connecté.
A moins que les applis java ne laissent des connexions ouvertes mais quand je quitte. Est-ce possible ?
De plus, ce sont des connexions locales, puisque j'ai "127.0.0.1" comme IP ?
Excusez-moi Guillaume, mais le jour où je passe en production, je ne peux certainement pas redémarrer.
Comment peut-il rester des connexions ouvertes ?
N'y a t'il pas un moyen de les fermer automatiquement (par exemple aprés plusieurs heures) ?
Le fait d'avoir des connexions qui restent ouvertes peut-il dégrader les performances ?
Merci.
Bonjour Guillaume,
Super, j'ai testé et déconnecté mon pgadmin, cela fonctionne, merci.
Concernant la commande PS de départ, je suis seul à utiliser la machine, les 2 seules appli java qui utilise le serveur sont arrêtées, les lignes suivantes sont-elles normales ?
postgres 12053 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53496) idle
Merci pour votre aide.
Bonjour à tous,
Je travaille sur une machine de test, en version 8.4.2 sous Red Hat 5.
Je suis en cours de lecture du livre "Admin Cookbook", je suis sur le sujet qui parle de déconnecter un utilisateur.
Je fais des éssais avec pg_terminate_backend() et pg_stat_activity mais je n'arrive pas au bon résultat.
Je me connecte, depuis mon PC XP, sur le serveur et je commence par faire un ps -ef | grep postgres
postgres 2604 1 0 Jan28 ? 00:00:01 /usr/local/pgsql/bin/postmaster -D /home/postgres/PG_DATA
postgres 2606 2604 0 Jan28 ? 00:00:00 postgres: logger process
postgres 2608 2604 0 Jan28 ? 00:00:00 postgres: writer process
postgres 2609 2604 0 Jan28 ? 00:00:00 postgres: wal writer process
postgres 2610 2604 0 Jan28 ? 00:00:00 postgres: autovacuum launcher process
postgres 2611 2604 0 Jan28 ? 00:00:01 postgres: stats collector process
postgres 12053 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53496) idle
root 19381 2450 0 11:24 ? 00:00:00 sshd: postgres [priv]
postgres 19384 19381 0 11:24 ? 00:00:00 sshd: postgres@pts/1
postgres 19385 19384 0 11:24 pts/1 00:00:00 -bash
postgres 20625 19385 0 12:07 pts/1 00:00:00 ps -ef
postgres 20626 19385 0 12:07 pts/1 00:00:00 grep postgres
Est-il normale de voir autant de chose ?
Ensuite, je lance, depuis mon PC, PgAdmin et je me connecte à une base du serveur, et je relance la commande ps -ef | grep postgres (j'ai remplacé mon adresse IP par [MON IP])
postgres 2604 1 0 Jan28 ? 00:00:01 /usr/local/pgsql/bin/postmaster -D /home/postgres/PG_DATA
postgres 2606 2604 0 Jan28 ? 00:00:00 postgres: logger process
postgres 2608 2604 0 Jan28 ? 00:00:00 postgres: writer process
postgres 2609 2604 0 Jan28 ? 00:00:00 postgres: wal writer process
postgres 2610 2604 0 Jan28 ? 00:00:00 postgres: autovacuum launcher process
postgres 2611 2604 0 Jan28 ? 00:00:01 postgres: stats collector process
postgres 12053 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221 2604 0 Feb02 ? 00:00:00 postgres: postgres geo 127.0.0.1(53496) idle
root 19381 2450 0 11:24 ? 00:00:00 sshd: postgres [priv]
postgres 19384 19381 0 11:24 ? 00:00:00 sshd: postgres@pts/1
postgres 19385 19384 0 11:24 pts/1 00:00:00 -bash
postgres 20739 2604 0 12:11 ? 00:00:00 postgres: postgres postgres [MON IP](1621) idle
postgres 20740 2604 1 12:11 ? 00:00:00 postgres: postgres geo [MON IP](1622) idle
postgres 20741 19385 0 12:11 pts/1 00:00:00 ps -ef
postgres 20742 19385 0 12:11 pts/1 00:00:00 grep postgres
Je me connecte via psql et je fais un select * from pg_stat_activity;
datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query
_start | backend_start | client_addr | client_port
-------+----------+---------+----------+----------+---------------------------------+---------+-------------------------------+---------------
----------------+-------------------------------+----------------+-------------
11564 | postgres | 20739 | 10 | postgres | <IDLE> | f | | 2011-02-03 12:
11:41.487737+01 | 2011-02-03 12:11:41.219511+01 | [MON IP] | 1621
22662 | mabase | 20740 | 10 | postgres | <IDLE> | f | | 2011-02-03 12:
11:41.450619+01 | 2011-02-03 12:11:41.247088+01 | [MON IP] | 1622
22662 | mabase | 20790 | 10 | postgres | select * from pg_stat_activity; | f | 2011-02-03 12:13:59.239447+01 | 2011-02-03 12:
13:59.239447+01 | 2011-02-03 12:13:55.288704+01 | | -1
22662 | mabase | 12053 | 10 | postgres | <IDLE> | f | | 2011-02-02 11:
43:35.830329+01 | 2011-02-02 11:20:21.923329+01 | 127.0.0.1 | 44356
22662 | mabase | 12056 | 10 | postgres | <IDLE> | f | | 2011-02-02 12:
26:11.561325+01 | 2011-02-02 11:20:52.91473+01 | 127.0.0.1 | 44358
22662 | mabase | 12218 | 10 | postgres | <IDLE> | f | | 2011-02-02 11:
27:01.674583+01 | 2011-02-02 11:27:01.659435+01 | 127.0.0.1 | 53493
22662 | mabase | 12219 | 10 | postgres | <IDLE> | f | | 2011-02-02 11:
27:09.920393+01 | 2011-02-02 11:27:09.905238+01 | 127.0.0.1 | 53494
22662 | mabase | 12221 | 10 | postgres | <IDLE> | f | | 2011-02-02 12:
26:16.187483+01 | 2011-02-02 11:27:16.823725+01 | 127.0.0.1 | 53496
(8 rows)
Comment faire pour déconnecter mon PgAdmin ?
J'espère être clair, merci pour les réponses.
Super.
Vraiment trés court et puissant.
J'ai tout de même besoin d'une fonction car utilisé dans du PHP.
Merci encore.
Marc,
Je pense que tu veux dire semaine et non pas mois ?
En paramètre, il s'agit du N° de semaine dans l'année, par exemple nous sommes en semaine 49 de l'année 2010, donc 1049.
Tu me conseille donc de prendre 2 paramètres (Année, N°semaine) pour éviter le découpage dans la fonction ?
Merci pour ton aide.
Bonjour Marc,
Peux-tu m'expliquer plus clairement ?
Merci.
Bonjour,
Merci pour la réponse.
A force de chercher, j'ai écrit ceci :
SELECT to_char(to_date(substr(to_char(current_date,''YYYY''),1,2)||SUBSTR($1,1,2)||''-''||SUBSTR($1,3,2)||''-1'', ''IYYY-IW-ID''),''YYYYMMDD'');
En entrée, je prends un N° de semaine au format YYWW, par exemple nous sommes en semaine 49 de l'année 2010, donc 1049.
J'ai fait plusieurs tests, cela semble fonctionner.
Bonjour à tous,
Je travaille sur une base 8.4 sous CentOS.
Je souhaite écrire une fonction qui :
prend en paramètre un N° de semaine
retour la date correspondant au 1er jour (lundi) de cette semaine.
J'ai trouvé la fonction pour calculer un N° de semaine à partir d'une date:
SELECT EXTRACT(week FROM $1::date)::integer INTO nNoSem;
Mais je ne sais pas comment retourner la date du lundi de cette semaine.
Merci pour votre aide.
Super, cela fonctionne.
Merci beaucoup Marc.
Bonjour Marc,
Merci pour la rapidité de la réponse.
Je suis dans un bloc Pl/PgSQL.
Bonjour,
Je travaille sur une 8.4.2 sous linux.
Est-il possible de récupérer le nombre de lignes mises à jour par une commande UPDATE ?
Merci pour les réponses.
Bonjour à tous,
Je travail sur une 8.4.2 sous Cent-OS 5.
Je cherche s'il est possible de définir "une variable d'environnement" dans une grappe de bases de données ou dans une base de données ?
Par exemple, j'installe des serveurs sur différents sites et je veux stocker le nom du site dans la grappe ou dans la base de données.
Pouvez-vous orienter mes recherches ?
Merci pour les réponses.
Bonjour Guillaume,
Merci pour la réponse.
Question 1 : c'est au niveau syntaxique que je me pose la question. Y-a-t'il une autre façon, peut être plus propre, d'écrire cette suite de CASE ?
Question 2 : Non aucun problème (jusqu'à présent, je suis en test). Je veux savoir si au niveau de la déclaration de la Vue je pourrai être limité sur la longueur de la valeur que je veux faire rentrer dans j_delete, j_insert et j_update ?
Bonjour,
Je travaille sur une BD 8.4 sous Cent-OS 5.2.
J'ai créé une Vue qui doit contenir des infos pour faire de la mise à jour sur une table "journalisée" :
CREATE OR REPLACE VIEW sch2.vue_action AS
SELECT
CASE
WHEN act.id_action IS NULL THEN 'D'::text
ELSE 'I'::text
END AS j_flag, journal.ets, journal.j_date,
CASE
WHEN act.id_action IS NULL THEN ((('delete from sch1.action where id_action='::text || chr(39)) || journal.id_action::text) || chr(39)) || ';'::text
ELSE NULL::text
END AS j_delete,
CASE
WHEN act.id_action IS NULL THEN NULL::text
ELSE ((((((('insert into sch1.action values('::text || chr(39)) || journal.id_action::text) || chr(39)) || ','::text) || chr(39)) || act.libelle::text) || chr(39)) || ');'::text
END AS j_insert,
CASE
WHEN act.id_action IS NULL THEN NULL::text
ELSE ((((((('update sch1.action set libelle='::text || chr(39)) || act.libelle::text) || chr(39)) || ' where id_action='::text) || chr(39)) || journal.id_action::text) || chr(39)) || ';'::text
END AS j_update
FROM ( SELECT jour_action.ets, jour_action.id_action, max(jour_action.j_date) AS j_date
FROM sch2.j_action jour_action
WHERE jour_action.j_consumed::text = '1'::text
GROUP BY jour_action.ets, jour_action.id_action) journal
LEFT JOIN action act ON journal.id_action::text = act.id_action::text;
J'ai deux questions :
- Y-a-t'il une meilleure solution que d'imbriquer des CASE ?
- Y-a-t'il une limite à la longueur de la valeur que je retourne dans les CASE (delete from ...., insert into ...., update .... ?
J'espère être clair.
Merci pour vos réponses.
Super réactivité
Merci Marc et bon week-end.
Rebonjour,
Dans le cas du RECORD, comment exploiter les valeurs en retour de Fonction ?
Merci.