2012-05-25 24 views
12

Estoy tratando de usar módulos contrib en las nuevas bases de datos compartidas de Postgres 9 en Heroku. Más específicamente, el pg_trgm y fuzzystrmatch módulos. En el documentation diceCómo habilitar módulos contrib en la base de datos Postgres de Heroku

Además, muchas extensiones de cortesía están disponibles, tales como fuzzystrmatch, pg_trgm y unaccent.

Parece que no encuentro ninguna documentación sobre CÓMO habilitar realmente estos módulos en una base de datos Heroku compartida. Ver la respuesta a continuación.

NOTA:

He intentado ellos adición mediante la conexión a la base de datos con

heroku pg:psql HEROKU_POSTGRESQL_BROWN 

y funcionando

create extension pg_trgm 
create extension fuzzystrmatch 

pero después de intentar utilizarlo con

SELECT levenshtein('tests', 'test'); 

todavía dijo

ERROR: function levenshtein(unknown, unknown) does not existLINE 1: SELECT levenshtein('tests', 'test'); 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

Alguien sabe por qué sucede esto?

Respuesta

16

Encontrado respuesta here mientras fregado Stack Overflow. No sé por qué no apareció en ninguna de mis búsquedas de Google. Voy a dejar la pregunta aquí si alguien más usa la misma redacción para buscar esto.

Para habilitar módulos, es necesario añadirlos a una migración de la siguiente manera:

def up 
    execute "create extension fuzzystrmatch" 
    execute "create extension pg_trgm" 
end 
+2

Nota: Para que funcione, debe estar en postgresql 9.1. Para actualizar desde una versión anterior, haga lo siguiente: dev (https://gist.github.com/2883249), prod (https://devcenter.heroku.com/articles/upgrading-postgres-versions) – jfeust

+2

Puede obtener un listado completo de las extensiones disponibles en Heroku Postgres con 'echo' show extwlist.extensions '| heroku pg: psql' https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search – GregB

7

En las nuevas versiones de los carriles que debería ser suficiente para hacer:

def change 
    enable_extension "fuzzystrmatch" 
    enable_extension "pg_trgm" 
end 

Si tiene que escribir up y down métodos, el método correspondiente a enable_extension es disable_extension.

Cuestiones relacionadas