2011-08-25 6 views
6

Tengo una tabla postgresql que tiene una columna con tipo de datos = 'text' en la que necesito crear un índice que involucre a esta columna como tipo fundido en entero []. Sin embargo, siempre que intente hacerlo, me sale el siguiente error:Crear un índice postgresql en la columna de texto casted en el array

ERROR: funciones en la expresión de índice deben estar marcados INMUTABLE

Aquí está el código:

create table test (a integer[], b text); 

insert into test values ('{10,20,30}','{40,50,60}'); 

CREATE INDEX index_test on test USING GIN (( b::integer[]  )); 

Tenga en cuenta que una potencial solución es crear una función marcada como IMMUTABLE que toma un valor de columna y realiza la conversión de tipo dentro de la función, pero el problema (aparte de agregar sobrecarga) es que tengo muchos tipos de datos de matriz "objetivo" (por ejemplo, texto [], int2 [], int4 [], etc ...), y no sería posible crear una función separada para cada posible conjunto de datos de destino t ype

+0

¿Cuál es su pregunta? ;-) –

+1

Esto también se preguntó en la lista de correo, donde fue respondida. Si hace una pregunta tanto en Stack Overflow como en la lista de correo, * diga que lo hizo * y enlace a la publicación Stack Overflow desde la publicación de la lista de correo y/o enlace a la lista en los archivos de la pregunta de desbordamiento de pila . [Editar: dada la diferencia en las fechas de publicación, probablemente una pregunta casi idéntica por otra persona. Mi error.] –

Respuesta

2

Respondido in this thread en las listas de distribución de PostgreSQL. Haga clic en "Seguimiento" o "Siguiente por hilo" en los enlaces después de la publicación para seguir el hilo (breve) sobre el tema.

No hay ninguna receta dada allí, pero Tom solo está hablando sobre la definición de un elenco explícito de text[] a integer[]. Si el tiempo lo permite, presentaré esta respuesta con un ejemplo.

Cuestiones relacionadas