Vous n'êtes pas identifié(e).
Pages : 1
oui finalement autant reformater les tables.
merci en tout cas
Vous ne pourrez pas avec une simple requête SQL. Il vous faut soit un programme externe soit une fonction stockée.
ok pour la fonction mais avez vous une idée de la forme qu'elle doit prendre?
Bonjour ,
Je souhaite réaliser la fonction suivante:
table 1 table 2
ctxt|biotypo esp|b1|b2.5|b3
1| b1 AA|1|null|1
2| b2.5 AB|4|2|null
3| b3 AC|null|null|3
Résultat attendu:
ctxt|esp|bio
1|AA|1
1|AB|4
2|AB|2
3|AA|1
3|AC|3
L'idée du coup serait de passer en variable le résultat de la requête de la tab 1 afin de sélectionner la colonne adéquate.
Avez vous des pistes?
Il faut créer soi-même ce type de collations. Avec Postgres 12 au minimum et compilé avec ICU, il faudrait faire:
CREATE COLLATION French_CI_AI ( provider = 'icu', locale = 'fr@colStrength=primary', deterministic = false );
ok merci beaucoup
je me permet de renvoyer vers votre article
http://blog-postgresql.verite.pro/2019/ … istes.html
Bonjour,
Après quelques recherche, il n'y a pas grand chose sur la fonction collate permettant de rendre utf8 insensible à la casse.
SELECT 'Courléon' COLLATE French_CI_AI;
French_CI_AI vient de sql serveur et j'ai le message suivant (le collationnement « french_ci_ai » pour l'encodage « UTF8 » n'existe pas)
Avez vous quelques pistes?
merci
[PG13]
Bonjour
Je souhaiterai avoir dans une table les modifications d'une bdd.
j'ai besoin des colonnes suivantes : utilisateur, date, heure, type[INSERT, UPDATE,DELETE],schéma, table.
Je peux bien sur faire un trigger et l'appeler pour chaque table.
mais est ce qu'il y a pas plus simple, j'ai un peu regarder parmi les extensions mais je m'y perd un peu.
Avez vous des tuyaux?
bonjour,
j'ai 2 instances qui pointent sur la même base de donnée.
distant:
host = 98.***.**.*
port = 5532
db = test;
réseau local
host = 193.***.**.*
port = 5532
db = test;
la question est de savoir si il est possible de modifier le fichier pg_service.conf, le host en l'occurrence, en fonction de l'adresse ip que j'utilise.
lorsque je me connecte au réseau local et qu'il détecte le premier octet "193"cela change l'host de l'instance.
du coup j'ai plus qu'une instance qui change d'host en fonction de là ou je suis.
est ce possible via un shell?
si vous avez d'autre tuyaux, je suis preneur.
oui merci je comprends.
une autre petite question,
Du coup sur mon client pgadmin j'ai deux serveurs pointant sur la même base de donnée. un serveur (local) sur le réseau local lorsque je suis connecté (à mon bureau) et l'autre (distant) lorsque je suis en télétravail.
Est ce qu'un tunnel SSH (le NAS dispose d'un serveur SSH) est recommandé ? est ce vraiment utile?
ok la méthode est bien je fais un pg_dump sur la bdd en local et un restore sur la bdd serveur.
Peut être que je dois cibler les tables /vues modifiées ou crées et uniquement restaurer celles ci?
Comment comptez-vous déployer votre DDL une fois le travail terminé ?
je souhaite pouvoir avoir des versions de ma base de données pour que en parallèle je puisse travailler sur celle en développement.
Que voulez vous dire?
Bonjour,
actuellement je développe une base de donnée en local, cependant l'objectif à terme est de la migrer sur le serveur de l'entreprise.
Est ce que je dois créer une réplication streaming sur le serveur de l'entreprise?
L'idée est que les collègues puisse travailler sur les dernières versions de tables/vues pas sur celles ou je suis en cours de modification.
Et puis je me vois pas faire un restore à chaque fois.
avez vous des "bonnes pratiques" dans ce cas?
Je ne suis pas certain de comprendre pourquoi la modification du script python est trop compliquée. Vous avez à un endroit une comande générant INSERT INTO emp_aappma (emp,id_aappma) VALUES (false, 'Ablette'). Il suffit de changer par un INSERT INTO ... SELECT ... FROM .... JOIN... Cela ne devrait absolument pas changer le reste du script?
Oui effectivement.
mais je vais rester sur une table permettant l'import de csv brut et grâce aux triggers manipuler la donnée et l'envoyer dans les tables adéquates.
Merci pour votre aide
Pourquoi ne pas corriger le script python afin qu'il génère une requête SQL valide faisant la correspondance entre votre "aappma" et son identifiant ?
oui effectivement mais dans mon cas c'est trop compliqué (j'exploite les données issue de formulaires PDF)
ok l'import de csv permet il l'action d'un trigger? du type UPDATE ou INSERT?
Mon idée, c'est qu'il faut mieux expliquer votre problème parce que ça ne veut absolument rien dire. "Envoyer la chaîne" n'a aucun sens en SQL. Insérer une chaîne dans un champ de type integer est impossible, et il est impossible de détourner ça en SQL pour faire autre chose. À la rigueur, c'est possible dans une routine (par exemple en PL/pgsql) mais c'est le seul contournement possible.
Bref, expliquer mieux ce que vous voulez faire parce que c'est vraiment pas clair.
oui pas de problème,
TABLE aappma
id, aappma
1, Ablette
INSERT INTO emp_aappma (emp,id_aappma) VALUES (false, 'Ablette') => cette commande vient d'un script python via psycopg2 moulinant un csv (infos saisie par utilisateurs)
Déclenchement du TRIGGER
ce que je veux obtenir:
TABLE emp_aappma
emp, id_aappma
false,1
Faire une vue qui a un id_aappma text ; et un trigger INSTEAD OF INSERT ?
je comprend l'idée mais je ne vois pas très bien la démarche.
CREATE TABLE aappma
(
id smallint,
geom geometry(MultiPolygon,2154),
aappma character varying(254),
nom character varying(254)
)
CREATE TABLE emp_aappma
(
id_emp bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( CYCLE INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
emp boolean NOT NULL,
id_aappma smallint,
)
CREATE OR REPLACE FUNCTION id_aappma() RETURNS trigger AS $emp_id_aappma$
BEGIN
NEW.id_aappma = (select id from aappma where aappma = NEW.id_aappma);
END;
$emp_id_aappma$ LANGUAGE plpgsql;
CREATE TRIGGER id_aappma BEFORE INSERT OR UPDATE ON emp_aappma
FOR EACH ROW EXECUTE FUNCTION id_aappma();
INSERT INTO emp_aappma (emp,id_aappma) VALUES (false, 'Ablette')
ERREUR : ERREUR: syntaxe en entrée invalide pour le type smallint : « Ablette »
voilà le but est lorsque j'envoie la chaine 'Ablette' le déclencheur retourne l'id associé via un select sur une autre table
cependant insérer une valeur de type chaine dans un champ type integer, c'est pas top.
comment contourner ce problème?
avez vous des idées?
Merci beaucoup pour votre aide.
sur mon NAS, j'utilise docker avec une sauvegarde automatique via cron schedule qui utilise l'utilisateur postgres.
je voudrais empêcher un client du réseau de remonter au serveur en utilisant l'utilisateur postgres.
les utilisateur utilise QGIS.
C'est pourquoi mon intention de rejeter toutes tentatives via l'utilisateur postgres.
ce rôle postgres se révèlerait être exclusivement dédié à une intervention en local sur le serveur.
j'espère que c'est un peu plus claire.
c'est parce que ma base de donnée est sur un NAS.
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all postgres 127.0.0.1/32 reject
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all postgres ::1/128 reject
host all all ::1/128 scram-sha-256
désolé de ne pas être très claire.
si j'ai instauré une règle pour ipv6 je dois la mettre pour ipv4?
merci,
voici une config auquel j'ai pensé
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all postgres ::1/128 reject
host all all ::1/128 scram-sha-256
l'idée est de bloquer l'utilisateur postgres uniquement sur une connexion distante.
ok merci de la réponse,
je comprend l'idée de restriction des adresses ip avec pg_hba.conf.
Seulement, si j'autorise une adresse ip, je fournie à l'utilisateur son user et password mais si il s'y connait un peu, il peut se connecter en tant que user:postgres et password:postgres .
A moins de changer le password du user postgres?
Je veux juste connaitre les bonne pratiques.
merci d'avance
Bonjour,
alors question toute bête. Comment gérer le rôle postgres? est il encore vraiment nécessaire si je supprime la db 'postgres'?
Je veux éviter à ce rôle par défaut qui permet de se connecter et avoir accès aux bdd.
Pages : 1