Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#151 Re : PL/pgSQL » meta sql » 06/02/2017 18:45:11
merci
ça marche encore mieux avec
|| string_agg(quote_ident(a.attname || ' (' || format_type(a.atttypid, a.atttypmod) || ') '), ', ')#152 Re : PL/pgSQL » meta sql » 06/02/2017 12:19:15
Merci !
Il me faudrait encore le data type de la colonne qui fait partie de la pk.
Pourriez-vous m'indiquer la solution optimale ?
#153 Re : Migration » Liste de PKs et de FKS multi-colonnes » 03/02/2017 12:13:14
Merci !
Je n'avais pas vu votre poste d'hier !
Un bon week-end à tous les dalibiens !
#154 Migration » Liste de PKs et de FKS multi-colonnes » 03/02/2017 11:18:14
- Michel Depiesse
- Réponses : 2
Bonjour,
Dans le cadre d'une migration, j'ai besoin de deux listes ayant le format suivant
PKs
table_name, PK name, PK colonnes
ex :
Contacts, ContactID, ContactID
ContactsCategory, ID, ContactID, CategoryID
...
FKs
table_name, FK name, FK colonnes
où les xK colonnes sont des listes de 1 ou plusieurs éléments.
J'ai cherché sur le net. J'ai l'impression que crosstab ou array_arg seraient utiles mais je n'en suis pas sûr.
J'ai besoin d'aide car je ne vois pas comment m'en sortir.
Merci
#155 Re : PL/pgSQL » meta sql » 02/02/2017 15:59:39
Bonjour,
Je précise ma question : je veux transformer des contraintes PK et FK en contraintes UNIQUE.
Ces contraintes PK et FK pouvent, bien entendu, porter sur plusieurs colonnes.
Un query dans le data dictionnary me donnera toutes les infos sur les contraintes PK et FK.
Comment générer les commandes du type : alter table x add constraint unique (col1, col2, col3);
En fait, j'ai vu sur le net un procédé mais je ne me souviens plus où.
Mais il existe !
Bonne après-midi aux dalibiens !
#156 PL/pgSQL » meta sql » 02/02/2017 12:27:37
- Michel Depiesse
- Réponses : 6
J'écris souvent des scripts sql qui écrivent des scripts sql.
Jusqu'à présent, je faisais comme ça :
select
'alter table "'
|| table_name_fk
|| '" drop constraint "'
|| column_name_fk
|| '_fk"'
|| ';'
from fks_contacts;Existe-t-il en pg un procédé plus élégant ?
Merci
#157 Re : PL/pgSQL » ERROR: trigger functions cannot have declared arguments » 02/02/2017 11:20:02
Merci !
Je vous ai posé la question un peu trop vite car j'ai trouvé la réponse entretemps.
Encore merci à Dalibo pour tout ce que vous faites pour les éléphanteaux !
#158 PL/pgSQL » ERROR: trigger functions cannot have declared arguments » 02/02/2017 11:03:51
- Michel Depiesse
- Réponses : 2
Bonjour,
Je voudrais accès dans la fonction appelée par un trigger au nom de la table pour lequel ce trigger a été déclenché.
Je voudais avoir une fonction after_insert qui marche pour les triggers after insert de toutes les tables d'une db.
Que faire ?
Merci pour votre attention
#159 Re : PL/pgSQL » newline » 01/02/2017 16:36:21
ça marche !
merci !
#160 Re : PL/pgSQL » newline » 01/02/2017 16:24:08
merci mais même comme ça, je reçois ce '+'
je veux écrire un script qui me génère des triggers pour toutes les tables d'une db
un désir naturel et légitime
comment puis-je me débarasser de ce '+' intempestif
merci pour votre attention
#161 Re : PL/pgSQL » newline » 01/02/2017 13:44:42
Merci mais
1 ne marche pas
et 2 ajoute un '+' avant d'aller à la ligne
#162 Re : PL/pgSQL » newline » 31/01/2017 19:27:31
#163 PL/pgSQL » newline » 31/01/2017 15:56:35
- Michel Depiesse
- Réponses : 7
Bonjour,
Je voudrais faire qqch comme ça :
select 'insert into ' || table_name || '\n' || 'values' etc...
mais le \n ne marche pas.
Comment faire ?
Merci
#165 Re : PL/pgSQL » Nom de fonction comme paramètre d'une fonction » 29/01/2017 14:59:37
Merci ! Ca marche
drop table if exists wrk_simil_compare_methods;
create table wrk_simil_compare_methods(
value1 varchar
,value2 varchar
,method varchar
,simil_value double precision
);
create or replace function generic_simil(
field_name varchar
,value2cmp varchar
,typeofvalue varchar
,algorithm varchar
,threshold decimal
) returns void as $$
begin
execute
'insert into wrk_simil_compare_methods select '
|| '''' || field_name || ''','
|| '''' || value2cmp || ''','
|| '''' || algorithm || ''','
|| algorithm || '('
|| '"' || field_name || '",'
|| '''' || value2cmp || '''' || ')'
|| ' from "tblContacts" where '
|| algorithm || '('
|| '"' || field_name || '",'
|| '''' || value2cmp || '''' || ')'
|| ' > ' || threshold;
end; $$ language 'plpgsql';
select generic_simil('Company', 'Dalibo', 'varchar', 'lev', 0.40);
select generic_simil('Company', 'Diolabo', 'varchar', 'lev', 0.40);
select generic_simil('Company', 'Libido', 'varchar', 'cosine', 0.40);
select generic_simil('Company', 'Oracle', 'varchar', 'cosine', 0.40);
select * from wrk_simil_compare_methods;encore une petite question : le value2cmp pourrait être un nombre. Dans ce cas, il ne faudrait pas le mettre entre '. Comment faire que le script détecte le type de value2cmp et décide de mettre les ' ou non ?
Merci.
#166 PL/pgSQL » Nom de fonction comme paramètre d'une fonction » 27/01/2017 15:38:10
- Michel Depiesse
- Réponses : 4
Bonjour,
Dans le but de comparer plusieurs algorithmes de pg_similarity, j'ai besoin d'envoyer comme paramètre le nom de la fonction
J'aimerais mettre le sql suivant dans une fonction où jaro pourrait être remplacé par lev ou cosine, etc...
insert into
wrk_simil_compare_methods
select
user_name
,'Company'
,"ContactID"
,jaro("Company", company2cmp)
,'jaro'
from
"tblContacts"
where
jaro("Company", company2cmp) > 0.75;Est-ce possible en PL/pgSQL ?
Merci pour votre attention,
Mchl
#167 Re : Migration » Performance d'un db PostgreSQL avec un front-end en Access. » 26/01/2017 17:50:56
Finalement, le code suivant fonctionne bien :
' execute SQL on server
Private Sub RunSQLOnServer(SQLStmt As String)
Dim cnn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "DSN=PostgreSQL test;"
' MsgBox ("conn.ConnectionString = " & conn.ConnectionString)
MsgBox ("SQLStmt sent to the server : " & SQLStmt)
conn.Open
conn.Execute SQLStmt
Set conn = Nothing
End SubMerci pour votre attention et bon week-end
#168 Re : Migration » Performance d'un db PostgreSQL avec un front-end en Access. » 25/01/2017 11:24:12
J'ai, bien sûr, testé le query directement sur le serveur. (Bien que ne travaillant pas chez Dalibo, je ne suis pas complètement idiot.)
Mais le problème n'est pas reproductible : qqs fois, l'update se fait à la vitesse de l'éclair et qqfois, il lui faut 10 bonnes secondes.
Serait l'ODBC qui a des problèmes de congestion ?
#169 Migration » Performance d'un db PostgreSQL avec un front-end en Access. » 25/01/2017 10:15:23
- Michel Depiesse
- Réponses : 4
Bonjour,
Je suis en train de porter une appli ms access sur pg.
Le client veut garder le front-end en access et avoir les data sur pg.
J'ai fait des linked tables. Ca va bien pour les select mais c'est très lent pour les autres opérations.
J'ai envoyé le query (un update) sur le serveur via ADODB d'access.
C'est beaucoup mieux mais c'est encore fort lent.
Comment pourrais-je optimiser ?
Merci pour votre attention.
Mchl
#170 Re : Optimisation » Unique constraint et index » 23/01/2017 11:52:58
Merci mille fois.
Mais il se fait qu'un query qui s'exécutait en un instant sur Access met plusieurs minutes maintenant que les data sont sur pg.
Dans quelle direction dois-je chercher ?
Merci pour votre attention.
#171 Optimisation » Unique constraint et index » 23/01/2017 11:28:05
- Michel Depiesse
- Réponses : 3
Bonjour,
J'ai migré une db access en pg au moyen de Bullzip.
Cet outil a créé en pg des unique constraint sur des colonnes qui sont des index en Access.
Pg crée-t-il des index pour des colonnes ayant une constraint unique ?
Merci à tous et bonne journée,
Mchl
#172 Re : PL/pgSQL » Création de triggers pour toutes les tables d'une db » 19/01/2017 19:11:16
Ben voilà, j'ai fait les deux en un :
--
-- modifies db structure for sync
--
--
-- creates trigger post update for all tables
--
create or replace function update_modification_columns() returns trigger as $$
begin
new.modification_date := now();
new.modified_by := current_user;
return new;
end;
$$ language 'plpgsql';
--
-- add columns and trigger for each tables
--
do $$
declare
t record;
begin
for t in select table_name from information_schema.tables where table_schema = 'public'
loop
execute format('alter table %I
add column creation_date timestamp default current_timestamp
,add column created_by name default current_user
,add column modification_date timestamp
,add column modified_by name
', t.table_name);
execute format('create trigger update_modification_columns
before update on %I
for each row
when (old.* is distinct from new.*)
execute procedure update_modification_columns()
', t.table_name);
end loop;
end;
$$ language 'plpgsql';Merci pour votre attention
#173 PL/pgSQL » Création de triggers pour toutes les tables d'une db » 19/01/2017 16:40:03
- Michel Depiesse
- Réponses : 1
Bonjour,
J'ai fait :
--
-- receives table_name as parameter and adds columns to this table
--
create or replace function add_columns(_t text) returns void as $$
begin
execute format('alter table %I
add column creation_date timestamp default current_timestamp
,add column created_by name default current_user
,add column modification_date timestamp
,add column modified_by name
', _t);
end
$$ language 'plpgsql';
--
-- calls add_columns for all the tables of the db
--
select
add_columns(table_name)
from
information_schema.tables
where
table_schema = 'public'
order by
table_name;et ça marche.
Maintenant, je voudrais ajouter une trigger post update pour chaque table qui mettrait à jour les colonnes modification_date et modified_by avec now() and current_user.
Mais je ne vois pas dans quelle direction aller ? un execute format ? un meta-sql ? pourrais-je faire une procedure unique pour toutes les tables ?
Merci pour votre attention.
Mchl
#174 Re : Installation » Collation Case Insensitive » 18/01/2017 17:57:33
$0 ! pas mal...
tant que j'ai un spécialiste en ligne...
j'ai persuadé mon patron de passer d'Access à PostgreSQL
mais pour le front-end ?
on peut garder Access
pensez-vous que Base de LibreOffice est assez puissant ?
et pour faire des forms en web, quel outil conseilleriez vous ?
#175 Re : Installation » Collation Case Insensitive » 18/01/2017 17:16:06
mettre des double quotes dans des noms de variables ?
drôle d'idée ;-)
on fait des trucs comme ça chez Dalibo ?