/ / Rails db: structure: dump tiene rutas de búsqueda incorrectas - ruby-on-rails, postgresql, schema, postgis

Rails db: structure: dump tiene rutas de búsqueda incorrectas - ruby-on-rails, postgresql, schema, postgis

estoy usando db/structure.sql para preservar nuestro estado DB como lo hemos hecho PostGIS extensiones y funciones integradas que hacen que el uso schema.rb poco práctico.

Cuando se ejecuta db:structure:dump rails tiene el extraño comportamiento de establecer rutas de búsqueda cerca de la parte superior Y cerca de la parte inferior del archivo. El problema aquí es que la ruta de búsqueda en la parte superior es incorrecta, lo que provoca db:schema:load fallar miserablemente.

Lo estoy editando manualmente en este momento (es decir, agregando postgis a la ruta de búsqueda superior), pero sería bueno si de alguna manera pudiera obtener la ruta de búsqueda establecida correctamente por la tarea de volcado.

database.yml

development: &dev
adapter: postgis
database: myapp_dev
host: localhost
encoding: utf8
template: template0 # Required for UTF8 encoding
postgis_extension: true
schema_search_path: "public,postgis"

db / structure.sql

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = "UTF8";
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

... Table / Sequence / Index creation happens here ...

--
-- PostgreSQL database dump complete
--

SET search_path TO public,postgis;

... Migrations inserted here ...

El problema aquí es que las tablas necesitan postgis en la ruta de búsqueda que se creará (utilizan postgis tipos de datos después de todo)

Supongo que el segundo conjunto de rutas de búsqueda se agrega como resultado de las rutas de búsqueda establecidas en database.yml.

¿Es posible obtener rieles para colocar la ruta de búsqueda correcta en la parte superior del archivo?

Respuestas

1 para la respuesta № 1

He realizado un proyecto de prueba y una secuencia repetida de acciones descritas en la pregunta: ¡todo funciona bien! Noté regularidad: structure.sql contiene código:

SET search_path = public, pg_catalog;

CREATE TABLE spatial_tests (
id integer NOT NULL,
latlon postgis.geography(Point,4326),
geo_col postgis.geometry(Geometry,4326)
);

Prestar atención a postgis prefijo en los tipos de columna. Un código como este ocurre solo si la extensión postgis vive en el esquema postgis:

postgis_test=# dx
List of installed extensions
Name   | Version |   Schema   |                             Description
---------+---------+------------+---------------------------------------------------------------------
plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
postgis | 2.1.7   | postgis    | PostGIS geometry, geography, and raster spatial types and functions
(2 rows)

Y este código se ejecuta bien. En otro caso, cuando la extensión postgis vive en un esquema público, structure.sql se ve así:

SET search_path = public, pg_catalog;

CREATE TABLE spatial_tests (
id integer NOT NULL,
latlon geography(Point,4326),
geo_col geometry(Geometry,4326)
);

Aquí no hay prefijo en los nombres de columna y este código genera errores en la ejecución.

Chris Noldus, compruebe qué esquema contiene la extensión postgis en la base de datos donde realiza el volcado (puede hacerlo por dx comando en la consola psql): puede ser la causa del problema.

Una situación como esta puede ocurrir después de la creación de la base de datos por rake db:create sin postgis_schema: postgis en database.yml. Puede leer los detalles sobre esta opción en activerecord-postgis-adapter documentación.