Lists: | pgsql-es-ayuda |
---|
From: | "Arturo Rossodivita" <arossodivita(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Insertar un arreglo en el catalogo |
Date: | 2008-07-09 16:35:19 |
Message-ID: | 36fdef070807090935x1733de06k8f70d2dc8f99d3e1@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Hola, les escribo porque me encuentro en estos momentos extendiendo un
trabajo realizado sobre PostgreSQL para el uso de conguntos difusos y me he
encontrado con un problema.*
*
lo primero que estoy extendiendo es el CreateFuzzyPredStmt, ahora los
parametros pedidos son dinamicos, es decir, no hay una cantidad predefinida
de parametros sino de 1 a N.
la sintaxis queda de la siguiente manera:
CREATE FUZZY PREDICATE <nombre> ON <Dominio> AS (<pred1 / grado1>, <pred2 /
grado2>, ... , <predN / gradoN>);
*la tabla del catalogo pg_fuzzypred la extendi colocando la variable
*NameData preddisd*;
para almacenar los dominios discretos y un arreglo
*
anyarray predcompfplist*;
para almacenar los parametros del CREATE FUZZY PREDICATE
*
*luego en el gram.y extendi el CreateFuzzyPredStmt colocando lo siguiente:*
|
CREATE FUZZY PREDICATE ColId ON ColId AS '('CompFpList')'
{
CreateFuzzyPredStmt *n = makeNode(CreateFuzzyPredStmt);
n->pred=$4;
n->disd=$6;
n->compfplist=$9;
n->typefp=4;
$$ = (Node *)n;
}
;
CompFpList: CompFp { $$ =
list_make1($1);}
| CompFpList ',' CompFp { $$ = lappend($1,
$3);}
;
CompFp: CompFpName { $$ =
makeStringConst($1, NULL);}
;
CompFpName: SCONST { $$ = $1; }
;
*donde CompFpList es una lista, CompFP son nodos y CompFPName constantes
string.
*
*en el parsenodes.h en las estructuras A_FuzzyPred y CreateFuzzyPredStmt
agregue las variables :*
List *compfplist;
char *disd;
*en src/backend/commands/fuzzypred.c*
*agregue las variables:*
List *compfplist;
char *disd;
*el case :*
case EXTENSION:
typefp=EXTENSION;
disd=stmt->disd;
compfplist=stmt->compfplist;
break;
*y guardo los nuevos datos:*
new_record[Anum_pg_fuzzypred_preddisd - 1] =
DirectFunctionCall1(namein, CStringGetDatum(stmt->disd));
new_record[Anum_pg_fuzzypred_predcompfplist -1] =
DirectFunctionCall1(namein, CStringGetDatum(stmt->compfplist));
*Luego en el pg_attribute:*
*inserto los datos:*
DATA(insert ( 2859 preddisd 19 -1 NAMEDATALEN 9 0 -1 -1 f p i t f
f t 0));
DATA(insert ( 2859 predcompfplist 2277 -1 -1 10 1 -1 -1 f p x t f f t
0));
*Hasta este punto "esta todo bien" compila bien el postgreSQL arranca y creo
el predicado difuso*
CREATE FUZZY PREDICATE gordo ON contextura AS ('obeso / 1','normal / 0.4');
*y en el catalogo almacena por lo momentos el nombre gordo y el tipo 4. El
problema viene cuando en el pg_class
al insertar los datos pasandole la nueva cantidad de argumentos,
anteriormente 8 ahora 10 de la siguiente manera:*
DATA(insert OID = 2859 ( pg_fuzzypred PGNSP 87 PGUID 0 2859 0 0 0 0
0 f f r 10 0 0 0 0 0 f f f f 3 _null_ _null_ ));
DESCR("");
tambien compila y arranca pero al crear el predicado difuso el servidor se
cae mandandome un mensaje que hay un problema antes o despues de realizar la
operacion. Cuando en el pg_class le digo que me inserte nada mas 9
atributos, es decir, obviando los parametros y solo insertando el dominio
discreto lo realiza perfecto y almacena el dominio, para el ejemplo anterior
contextura.
De verdad no logro como hacer para insertar el arreglo, no se si los
parametros que paso en el pg_attribute estan malos y por ahi viene el
problema o que, si alguien puede ayudarme se lo agradeceria muchisimo pues
llevo ya tiempo estancado con esto. Gracias
From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Arturo Rossodivita <arossodivita(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Insertar un arreglo en el catalogo |
Date: | 2008-07-09 18:41:03 |
Message-ID: | 20080709184103.GG3946@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Arturo Rossodivita escribió:
> *y en el catalogo almacena por lo momentos el nombre gordo y el tipo 4. El
> problema viene cuando en el pg_class
> al insertar los datos pasandole la nueva cantidad de argumentos,
> anteriormente 8 ahora 10 de la siguiente manera:*
>
> DATA(insert OID = 2859 ( pg_fuzzypred PGNSP 87 PGUID 0 2859 0 0 0 0
> 0 f f r 10 0 0 0 0 0 f f f f 3 _null_ _null_ ));
> DESCR("");
Huh ... ¿por qué estás metiendo los predicados en pg_class? Más bien
parece que deberían tener un catálogo propio, ¿no?
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Arturo Rossodivita <arossodivita(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Insertar un arreglo en el catalogo |
Date: | 2008-07-09 18:52:32 |
Message-ID: | 20080709185232.GJ3946@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Arturo Rossodivita escribió:
> Hola, les escribo porque me encuentro en estos momentos extendiendo un
> trabajo realizado sobre PostgreSQL para el uso de conguntos difusos y me he
> encontrado con un problema.*
A todo esto, no ayuda nada que publiques pedazos de lineas de codigo; no
se entiende en que parte va cada linea. Si quieres mostrar
modificaciones al codigo de Postgres, envia un "diff -c"
(potencialmente, recortado para mostrar solo lo que quieres mostrar,
pero es importante que dejes los encabezados de archivos y numeros de
linea).
Ademas debes indicar que version de Postgres estas modificando.
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support