Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : C et C++ » la lecture ça passe, l'écriture ça casse. » 29/04/2010 10:29:32
en fait c'est ce que je fait avec la fonction verify_replicat, meme s'il y a un message d'erreur je récupère un 0, sinon ça me retourne 1.
#2 Re : C et C++ » la lecture ça passe, l'écriture ça casse. » 28/04/2010 17:08:46
:oops:
ça commence à m'enerver.
je n'ai rien comme réponse pour ces deux requêtes.
#3 Re : C et C++ » la lecture ça passe, l'écriture ça casse. » 28/04/2010 16:47:21
non, rien.
par contre la fonction mape_add_ip contient l'insert, et ça s'effectue sans problème.
#4 Re : C et C++ » la lecture ça passe, l'écriture ça casse. » 28/04/2010 16:39:53
j'ai ces erreurs ci:
Connection String: hostaddr=217.109.105.136 host=mape-manager user=mape password=pDocr1M! sslmode=require dbname=mapemanager port=5432
connection to DB ok!
commande 1 exécutée
1
NOTICE: l'adresse 192.168.1.14 existe déjà, son ID est le suivant:
commande 2 exécutée
7
row number 0 is out of range 0..-1
couldnt execute query 3
row number 0 is out of range 0..-1
couldnt execute query 4
PQresultStatus me retourne la valeur 7.
#5 C et C++ » la lecture ça passe, l'écriture ça casse. » 28/04/2010 15:49:52
- R.Seif
- Réponses : 8
Bonjour,
J'ai un problème que j'arrive pas à résoudre.
j'appelle une fonction sql qui utilise un select, et ça marche.
j'appelle une fonction qui utilise un insert et ça ne s'exécute pas.
PGresult* result1;
PGresult* result2;
PGresult* result3;
PGresult* result4;
//sprintf(commande_sql1,"select verify_replicat('192.168.1.1', 'ADC16448521539632AB165', current_timestamp);");
const char *commande_sql1="select * from ips;";
result1 = PQexec(connect_database, commande_sql1);
char *val1 = PQgetvalue(result1,0,0);
printf("%s \n", val1);
if ((PQresultStatus(result1) != PGRES_TUPLES_OK ))
{
fprintf(stderr, "couldnt execute query 1\n");
PQclear(result1);
}
else {
printf ("commande 1 exécutée\n");
}
//sprintf(commande_sql2,"select verify_replicat('192.168.1.1', 'ADC16448521539632AB165', current_timestamp);");
const char *commande_sql2="select mape_add_ip('192.168.1.4');";
result2 = PQexec(connect_database, commande_sql2);
char *val2 = PQgetvalue(result2,0,0);
printf("%s \n", val2);
if ((PQresultStatus(result2) != PGRES_TUPLES_OK ))
{
fprintf(stderr, "couldnt execute query 2\n");
PQclear(result2);
}
else {
printf ("commande 2 exécutée\n");
}
//sprintf(commande_sql3,"select verify_replicat('192.168.1.2', 'BCC16448521539632AB165', current_timestamp);");
const char *commande_sql3="select verify_replicat('192.168.1.2', 'BCC16448521539632AB165', current_timestamp);";
result3 = PQexec(connect_database, commande_sql3);
char *val3 = PQgetvalue(result3,0,0);
printf ("%s\n", val3);
if ((PQresultStatus(result3) != PGRES_TUPLES_OK ))
{
fprintf(stderr, "couldnt execute query 3\n");
PQclear(result3);
}
else {
printf ("commande 3 exécutée\n");
}
//sprintf(commande_sql4,"select verify_replicat('192.168.1.3', 'ADC16448521539632AB165', current_timestamp);");
const char *commande_sql4="select verify_replicat('192.168.1.3', 'ADC16448521539632AB165', current_timestamp);";
result4 = PQexec(connect_database, commande_sql4);
char *val4 = PQgetvalue(result4,0,0);
printf ("%s\n", val4);
if ((PQresultStatus(result4) != PGRES_TUPLES_OK ))
{
fprintf(stderr, "couldnt execute query 4\n");
PQclear(result4);
}
else {
printf ("commande 4 exécutée\n");
}
les deux premières requêtes fonctionnent puisqu'il s'agit d'une sélection simple, et d'une fonction qui utilise la sélection.
les deux dernières ne s'exécutent pas puisqu'ils font appels à une fonction qui ne fait que l'insertion
R.Seif est actuellement connecté
#6 Re : Général » ça neretourne rien » 23/04/2010 23:26:53
mais il doit me retourner la valeur même si elle est nulle!!!!
#7 Re : Général » ça neretourne rien » 23/04/2010 14:22:56
select mape_add_peer ('192.168.1.13',80);
une @ ip et un numéro de port quelconques commes entrées!!!!!
#8 Re : Général » ça neretourne rien » 23/04/2010 14:17:28
mape_add_peer
---------------
(1 file)
tu vois?
#9 Re : Général » ça neretourne rien » 23/04/2010 14:13:40
j'ai complété la condition, "else return peerid;"
et j'ai fait des raise notice à chaque étape, toujours rien!!!!!!!!!!!!!!!
#10 Général » ça neretourne rien » 23/04/2010 13:22:53
- R.Seif
- Réponses : 9
Bonjour,
j'ai un code qui est bien écrit, je suppose, mais qui ne retourne aucun résultat.
ça tourne, mais à la fin je n'ai une insertion ni dans la table ips, ni dans la table peers!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
create or replace FUNCTION mape_add_peer(inet,integer) RETURNS integer
AS $$
DECLARE
p_addr ALIAS for $1;
p_port ALIAS for $2;
ipid integer;
peerid integer;
BEGIN
-- Is the peer already set ?
select into peerid peers.id from peers, ips
where peers.ip = ips.ip and peers.id = ips.id and peers.ip = p_addr and peers.port = p_port;
IF peerid = 0
then
------ Get the ID corresponding to the address
select into ipid id from ips where ips.ip= p_addr;
IF ipid >= 1
then
insert into peers(ip, port, tmstmp) values (p_addr, p_port, date_trunc ('minute', current_timestamp));
select into peerid currval('peers_id_seq');
else
insert into ips(ip,md5) values (addr,'-');
select into ipid currval('ips_id_seq');
insert into peers(ip, port, tmstmp) values (p_addr, p_port, date_trunc ('minute', current_timestamp));
select into peerid currval('peers_id_seq');
end IF;
end IF;
return peerid;
end;$$
LANGUAGE plpgsql;
#11 Re : Optimisation » Nbre de cx simultanées? » 21/04/2010 16:48:48
ok, merci
#12 Optimisation » Nbre de cx simultanées? » 21/04/2010 16:44:10
- R.Seif
- Réponses : 2
Bonjour,
j'ai les infos suivantes:
- max_connections = 1000
- max_files_per_process = 1000
- work_mem = 1MB
- shared_buffers = 24MB
- effective_cache_size = 128 MB
Je voulais savoirs le nbre de connexions max simultanées que peut supporter le serveur??
#13 Réplication » truncate » 20/04/2010 16:55:16
- R.Seif
- Réponses : 1
Bonsoir,
je veux vider ma table chaque 30 min, l'option timer n'existe pas avec truncate!!!
qqu'un sait comment le faire?
#15 Re : Optimisation » Appel de deux fonctions ou jointure?? » 20/04/2010 15:36:06
create OR replace FUNCTION mape_get_ip(inet) RETURNS integer
AS $$
DECLARE
addr ALIAS for $1;
ipid integer;
BEGIN
select into ipid ip from ips where ips.ip= addr;
return ipid;
end;$$
LANGUAGE plpgsql;
--------------------------------------------------------------------------------------
create OR replace FUNCTION mape_get_peer(inet,integer) RETURNS integer
AS $$
DECLARE
addr ALIAS FOR $1;
port ALIAS FOR $2;
ipid integer;
peerid integer;
BEGIN
-- Get the ID corresponding to the address
select into ipid mape_get_ip(addr);
IF ipid >= 1
then
select into peerid id FROM peers WHERE peers.ip = addr AND peers.port = port;
return peerid;
else
return 0;
end IF;
end;$$
LANGUAGE plpgsql;
----------------------------------------------------------------------------------------
select into peerid mape_get_peer(p_addr,p_port);
ou bien
create or replace FUNCTION mape_get_peer(inet,integer) RETURNS integer
AS $$
DECLARE
addr ALIAS for $1;
port ALIAS for $2;
--ipid integer;
peerid integer;
BEGIN
select into peerid id from peers, ips
where peers.ip = ips.ip and peers.id = ips.id and peers.ip = addr and peers.port = port;
if peerid > 0
return peerid;
else
return 0;
end IF;
end;$$
LANGUAGE plpgsql;
#16 Optimisation » Appel de deux fonctions ou jointure?? » 20/04/2010 11:54:30
- R.Seif
- Réponses : 4
Bonjour,
Je me demandais c koi la solution la plus optimale?
est ce d'opter à chaque fois à l'appel de deux fonctions chacune scanne une table et rende un résultalt, ou bien faire une jointure entre les deux table avec toutes les conditions et rendre un seul résultat????
#17 Re : Optimisation » optimisation de l'insertion et la selection » 19/04/2010 16:16:44
wé je l'ai fixé.
host fait l'extraction de l'@ IP en texte.
càd host('192.168.1.1') --> 192.168.1.1
pardon j'ai pa fé attention, mé vous voulez dire que l'index sur mape_add_ip n'est ce pa?
parce que j'ai pas fait d'index en mape_get_ip
#18 Re : Optimisation » optimisation de l'insertion et la selection » 19/04/2010 15:52:06
c fait.
en plus j'ai gagné trop au niveau comparaison puisque mon prog utilise 5 fois la fonction mape_get_ip.
Je vous remercie.
#19 Re : Optimisation » optimisation de l'insertion et la selection » 19/04/2010 14:42:41
et bah ça ne marche pas quand je fais l'insert avant le select.
#20 Re : Optimisation » optimisation de l'insertion et la selection » 19/04/2010 14:18:53
et pour l'index?
en fait le test que je vais essayer est énorme, pour des observations de 1 journée, il me faut une journée pour récupérer les résultats.
donc j'ai opté à éliminer les index puisqu'ils ne sont efficace qu'en lecture, et non pas en écriture.
#21 Optimisation » optimisation de l'insertion et la selection » 19/04/2010 13:39:55
- R.Seif
- Réponses : 9
Bonjour,
Lors du programme si dessous, je veux insérer une @IP, tester son existance, me rendre un msg d'erreur (qui ne soit pas systématique) s'il existe, sinon on insère cette nouvelle @.
-- MAPE_ADD_IP
-- Takes a CIDR representation of the IP in input and adds a record in the ips table
-- returns the index of the entry
-- if the entry exists, returns simply the ID
--
CREATE OR REPLACE FUNCTION mape_add_ip(inet) RETURNS inet
AS $$
DECLARE
addr ALIAS FOR $1;
md5ip varchar;
ipid INTEGER;
BEGIN
SELECT INTO ipid mape_get_ip(addr);
IF ipid >= 1
THEN
return (addr);
ELSE
INSERT INTO ips(ip,md5) VALUES (addr,'-');
--SELECT INTO ipid currval('ips_id_seq');
END IF;
return (addr);
END;$$
LANGUAGE plpgsql;
-----------------------------------------------------------------------------------------
-- MAPE_GET_IP
-- Returns the ID of the given addr
--
CREATE OR REPLACE FUNCTION mape_get_ip(inet) RETURNS integer
AS $$
DECLARE
addr ALIAS FOR $1;
ipid INTEGER;
BEGIN
SELECT INTO ipid ip FROM ips WHERE host(ips.ip) = host(addr);
IF ipid >=1
THEN
return ipid;
ELSE
return 0;
END IF;
END;$$
LANGUAGE plpgsql;
--
cette opération va se faire plusieurs fois, donc j'ai pensé utiliser INSERT ... RUNNING ... mais j'ai pas su comment l'utiliser?
Pages : 1