Vous n'êtes pas identifié(e).

#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

#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

#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 Sub

Merci 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 ?

Pied de page des forums

Propulsé par FluxBB