Vous n'êtes pas identifié(e).
Même si la commande "net start" ne donne rien, le service Windows existe d'après la commande "sc query".
Les fichiers pg_hba.conf et postgresql.conf doivent impérativement être dans dans votre cas dans "PGDATA" càd dans
c:\Program Files\PostgreSQL\9.0\data
Essayez de déplacer ces 2 fichiers à cet endroit et de démarrer le service Windows de l'instance PG avec:
sc start postgresql-x64-9.0
Est-ce qu'il y a des erreurs ?
Est-ce qu'il y a maintenant un log dans pg_log et si oui quel est son contenu ?
Pour vérifier que le service Windows de l'instance PostgreSQL est bien démarré, essayez la commande suivante (ici j'ai la version 9.3 installée sur Windows 2016):
> net start | findstr Post
postgresql-x64-9.3 - PostgreSQL Server 9.3
Vous pouvez aussi tester avec la commamde sc query:
>sc query postgresql-x64-9.3
SERVICE_NAME: postgresql-x64-9.3
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Dans votre cas, la commande doit être:
sc query postgresql-x64-9.0
Ceci suppose le service Windows a le nom par défaut.
Ensuite il faut vérifier le log de l''instance qui doit se trouver par défaut dans
c:\Program Files\PostgreSQL\9.0\data\pg_log
Quel est son contenu ?
Est-ce qu'il y a des erreurs ?
NB: le fait que d'être un abonné Free ne doit rien changer (à condition que vous parlez bien d'une installation locale sur votre machine Windws 10 et non du service PostgreSQL gratuit que Free fournit mais qui est disponible uniquement par l' interface web http://sql.free.fr/phpPgAdmin.
Pour installer une ancienne (ou une nouvelle) version de Postgres sur Linux, il est toujours possible de l'installer à partir du code source: https://docs.postgresql.fr/9.3/installation.html.
Sinon il est possible d'utiliser l'exécutable pg_dump 12 pour exporter la base source en version 9.3 et l'exécutable pg_restore 12 pour importer dans la base cible en version 12.
Je trouve la formulation de la documentation officielle assez ambigüe et qu'elle manque vraiment d'exemple sur ce point spécifique de changement de version:
Parce que pg_dump est utilisé pour transférer des données vers des nouvelles versions de PostgreSQL™, la sortie de pg_dump devra pouvoir se charger dans les versions du serveur PostgreSQL™ plus récentes que la version de pg_dump. pg_dump peut aussi extraire des données de serveurs PostgreSQL™ plus anciens que sa propre version. (À l'heure actuelle, les versions de serveurs supportées vont jusqu'à la 8.0.) Toutefois, pg_dump ne peut pas réaliser d'extraction de serveurs PostgreSQL™ plus récents que sa propre version majeure ; il refusera même d'essayer, plutôt que de risquer de fournir une extraction invalide. Par ailleurs, il n'est pas garanti que la sortie de pg_dump puisse être chargée dans un serveur d'une version majeure plus ancienne -- pas même si l'extraction a été faite à partir d'un serveur dans cette version. Charger un fichier d'extraction dans un serveur de version plus ancienne pourra requérir une édition manuelle du fichier pour supprimer les syntaxe incomprises de l'ancien serveur. L'utilisation de l'option --quote-all-identifiers est recommendée lors de l'utilisation avec des versions différentes, car cela permet d'empêcher la venue de problèmes provenant de listes de mots clés dans différentes versions de PostgreSQL™.
Vous pouvez essayer:
# select to_number('123456','999999')::int::oid;
to_number
-----------
123456
(1 row)
Il y a 2 questions dans votre message:
- comment créer un serveur PostgreSQL répliqué sous Windows: c'est censé fonctionner comme sur Linux à part les spécificités Windows (syntaxe des noms de fichiers, service Windows pour l'instance/cluster)
- comment synchroniser les documents numérisés en dehors de la base: je ne sais pas si PostgreSQL sait faire ? En général on utilise des outils simples comme robocopy sur Windows ou rsync sur Linux ou des outils plus complexes comme DFS sur Windows ou DRBD sur Linux.
Que voulez-vous savoir en détail ?
Je ne sais pas précisément quel type de compte il faut utiliser pour le service PostgreSQL et les droits précis qu'il faut lui donner: je n'ai pas trouvé d'information précise à ce niveau.
La documentation la plus complète que j'ai trouvée est la suivante pour l'installlateur EntrepriseDB et la version 10:
https://get.enterprisedb.com/docs/Postg … de_v10.pdf
Mais j'ai utilisé cet installateur et contrairement à ce qui est indiqué il n'a pas créé de compte postgres pour le service Windows.
Bonjour,
Essayez de donner tous les droits à l'utilisateur 'NETWORK SERVICE' sur le répertoire DATA.
Permission denied: c'est un problème de droits d'accès.
Il faut vérifier que le compte du service Windows PostgreSQL a bien les droits de lectue et d'écriture dans PGDATA.
Le service Windows doit s'appeller postgresql-x64-11. PGDATA est par défaut C:\Program Files\PostgreSQL\11\data.
J'ai une installation locale de PG 10 sur Windows 2016 (mais sans Active Directory). J'ai utilisé le compte administrateur local et le service Windows s'exécute avec le compte "Network Service".
Pour vous aider, il faut avoir la description complète des tables concernées, la correspondance entre les colonnes et un exemple de MAJ: quand est-ce qu'il faut la faire et quand est-ce qu'il ne faut pas la faire.
Est-ce que cette requête donne le résultat demandé ?
insert into test_importb
select test_import.*
from test_import, test_importb
where test_importb.id_metier_<>test_import.id_metier_;
D'après le support de formation Dalibo (les outils de réplication):
L’outil repmgr3 de 2ndQuadrant permet la gestion de la haute disponibilité avec notamment la gestion des opérations de clonage, de promotion d’une instance en primaire et lad émotion d’une instance.L’outil repmgr peut également être en charge de la promotion automatique du nœud secondaire en cas de panne du nœud primaire, cela implique la mise en place d’un serveur supplémentaire par cluster HA (paire primaire/secondaire) appelé témoin (witness). Cette machine héberge une instance PostgreSQL dédiée au processus daemon repmgrd, processus responsable d’effectuer les contrôles d’accès réguliers à l’instance primaire et de promouvoir le nœud secondaire lorsqu’une panne est détectée et confirmée suite à plusieurs tentatives échouées consécutives.Afin de faciliter la bascule du trafic sur l’instance secondaire en cas de panne du primaire,l’utilisation d’une adresse IP virtuelle (VIP) est requise. Les applications clientes (hors administration) doivent se connecter directement à la VIP.
Ce concept de témoin est un concept général souvent utilisé dans les systèmes de haute-disponibilité.
Positionner log_checkpoints à on va uniquement ajouter des traces détaillées de l'activité des checkpoints dans le log (càd le journal des messages) de l'instance PostgreSQL: cela doit être tout à fait négligeable par rapport aux volumes de WAL écrits pendant la MAJ: il n'y a pas d'inquiétude à avoir que ce soit pour la charge processeur, la mémoire ou les disques.
Est-ce que vous avez des traces détaillées des checkpoints avec log_checkpoints=on ? Si oui, pouvez-vous les partager ?
Est-ce que vous avez une estimation du volume de WAL générés pendant la mise à jour et la durée de la mise à jour ?
En 9.3 Les paramètres checkpoint_xxx sont tous statiques et nécessitent un arrêt/relance. Si vous les modifiez et si log_checkpoints est à off, pensez aussi à mettre log_checkpoints à on.
En général on peut modifier checkpoint_segments et checkpoint_completion_target ensemble: vous pouvez augmenter checkpoint_segments à 10 ou 20 et checkpoint_completion_target à 0,9 pour lisser davantage les écritures.
Oui le fichier peut être supprimé selon les règles définies (pour CentOS 7) dans:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf
Cela ne doit pas donc être aléatoire (même s'il y a beaucoup de règles) et ne doit pas empêcher d'utiliser /tmp pour stocker un fichier temporaire avant de le transférer sur une autre machine.
Si vous avez de la place dans /tmp vous pouvez aussi essayer:
\copy (SELECT * FROM maTable) TO '/tmp/export.sql' DELIMITER ',' CSV;
Est-ce que que le compte Linux qui lance psql a bien le droit d'écrire dans le répertoire courant ? Si c'est le cas ça doit fonctionner pour avoir le fichier sur Linux.
Pas mieux:
set datestyle='dmy';
SET
with cte as
(
select justify_interval(('23-03-2020 16:00'::timestamp - '19-01-2020 06:30'::timestamp)
+ ('19-03-2020 06:30'::timestamp - '15-01-2020 06:30'::timestamp))
as intervalle
)
select
extract(year from intervalle) || ' an(s) ' ||
extract(month from intervalle) || ' mois(s) ' ||
extract(days from intervalle) || ' jours(s) ' ||
extract(hours from intervalle) || ':' ||
extract(minutes from intervalle) as durée
from cte;
durée
-----------------------------------
0 an(s) 4 mois(s) 8 jours(s) 9:30
(1 ligne)
select
to_char(justify_interval( ('23-03-2020 16:00'::timestamp - '19-01-2020 06:30'::timestamp)
+ ('19-03-2020 06:29'::timestamp - '15-01-2020 06:30'::timestamp)),
'y "ans" mm "mois" DD "jour(s)" HH "heure(s)" MI "min"' ) as durée;
durée
---------------------------------------------
0 ans 04 mois 08 jour(s) 09 heure(s) 29 min
(1 ligne)
Essayez avec JUSTIFY_HOURS:
postgres=# select ('23-03-2020 16:00'::timestamp - '19-03-2020 06:30'::timestamp) +
postgres-# ('19-03-2020 06:29'::timestamp - '15-03-2020 06:30'::timestamp);
?column?
-----------------
7 days 33:29:00
(1 ligne)
postgres=# select justify_hours(('23-03-2020 16:00'::timestamp - '19-03-2020 06:30'::timestamp) +
('19-03-2020 06:29'::timestamp - '15-03-2020 06:30'::timestamp));
justify_hours
-----------------
8 days 09:29:00
(1 ligne)
postgres=#
Je n'arrive pas à reproduire le résultat ni avec PG 12.2 ni avec PG 9.4.26:
postgres=# select '23-03-2020 16:00'::timestamp - '15-03-2020 06:30'::timestamp;
?column?
-----------------
8 days 09:30:00
(1 ligne)
Que donne le résultat de ma requête dans votre environnement ?
Quelle est votre version ?
Je n'arrive pas non plus à passer en français même avec le paramétrage suivant:
postgres=# set datestyle to 'DMY';
SET
postgres=# set lc_messages='fr_FR.UTF-8';
SET
postgres=# set lc_time='fr_FR.UTF-8';
SET
postgres=# select '23-03-2020 16:00'::timestamp - '15-03-2020 06:30'::timestamp;
?column?
-----------------
8 days 09:30:00
(1 ligne)
postgres=#
J'ai fait des tests avec PostgreSQL 10.12 sur Windows 2016, j'ai créé un script SQL avec notepad.exe.
Que le script soit sauvegardé en ANSI ou UTF-8 ne semble influer ni sur l'affichage ni sur le stockage d'une chaîne de caractères avec un caractère accentué.
Mon script en entrée:
select version();
\encoding
show client_encoding;
\l demo
\d t
truncate t;
insert into t values('Côte');
select * from t;
Résultat
select version();
version
-------------------------------------------------------------
PostgreSQL 10.12, compiled by Visual C++ build 1800, 64-bit
(1 ligne)
WIN1252
show client_encoding;
client_encoding
-----------------
WIN1252
(1 ligne)
Liste des bases de données
Nom | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès
------+--------------+----------+--------------------+--------------------+----------------
demo | postgres | UTF8 | French_France.1252 | French_France.1252 |
(1 ligne)
Table « public.t »
Colonne | Type | Collationnement | NULL-able | Par défaut
---------+------+-----------------+-----------+------------
c | text | | |
truncate t;
TRUNCATE TABLE
insert into t values('Côte');
INSERT 0 1
select * from t;
c
------
Côte
(1 ligne)
Remarque générale qui n'explique pas le problème précis qu'on a: au début de la discussion vous avez dit que vous prévoyez d'avoir une base sur Linux et vous développez avec une base Windows. Si vous utilisez la même version de PostgreSQL vous devez avoir en général le même comportement de la base mais pas sur certaines fonctionnalités liées aux jeux de caractères car PostgreSQL peut avoir un comportement différent liés aux paramètres de création de la base qui ne sont pas les mêmes sur Windows et Linux. Ainsi si je crée une base sur Linux avec PG 10.12 j'ai par défaut:
postgres=# create database demo;
CREATE DATABASE
postgres=# \l demo;
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+----------+----------+-------------+-------------+-------------------
demo | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(1 row)
postgres=#
Je constate que le paramètres LC_COLLATE et LC_CTYPE sont différents avec Windows: ce qui peut entraîner des comportements différents, par exemple dans le tri de chaînes de caractères.
Le paramètrage jeu de caractère côté client Windows et côté serveur PostgreSQL me semblent corrects.
Reste la piste de l'encodage du script sur Windows et peut-être autre chose que je ne vois pas.
LECARROU a écrit :j'ai modifier runpsql.bat et je n'ai plus l'avertissement au lancement de psql (cool)
si je fait
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
directement dans la console pslq pas de problème, il m'insère correctement les accents
mais si je lance le script depuis la console : \i 'D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt' toujours un problème sur les accents...
Il faut vérifier/corriger l'encodage du fichier .txt contenant le script (D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt par exemple)
OK mais comment fait-on avec Windows ?
Désolé il manquait un ';' pour la commande "show client_encoding'
\encoding
show client_encoding;
\l intensetbm
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
select * from_adm_pay where pay_abr='CIV';
Pouvez-vous nous donner la sortie complète du script suivant exécuté dans le même environnement que script2.txt:
\encoding
show client_encoding
\l intensetbm
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
select * from_adm_pay where pay_abr='CIV';