¿Usa un esquema que no sea público en PostGIS?

21

Actualmente estoy configurando una nueva instalación de PostGIS 2.0.2 y PostgreSQL 9.1.6 en Ubuntu. Recientemente me he encontrado con alguna información que indica que el uso del esquema público para almacenar todos los datos no es una idea buena.

Por esta razón, configuré un esquema llamado datos y me hice propietario, pero ¿es una buena idea?

Mis preocupaciones son:

  1. Además de configurar el propietario, es posible que deba prestar atención a las cosas en la pestaña Privilegios al crear este nuevo esquema (a través de pgAdmin III);
  2. Es posible que no obtenga los mismos beneficios almacenando mis datos en el esquema público y volcando todos los datos en un esquema separado antes de hacer una copia de seguridad / restauración (esto ahorraría algunas pulsaciones de teclas al usar ogr2ogr); y
  3. Puedo tener problemas al no tener las tablas y vistas predeterminadas de PostGIS en mi nuevo esquema de datos (están en el esquema público dentro de la misma base de datos).
Pablo
fuente
1
Mira la nueva respuesta aquí gis.stackexchange.com/a/270522/6052
Evan Carroll
3
Sí, sigue siendo válido. El punto principal es que es más limpio, ya que separa los datos del usuario de los datos y funciones del sistema.
John Powell el
No soy un usuario de PostGIS, pero sospecho que la mejor respuesta a su pregunta ahora puede ser gis.stackexchange.com/a/270522/115, por lo que, si está de acuerdo, lo alentaré a mover su marca de verificación Aceptar.
PolyGeo
1
Esta pregunta debería ser dos preguntas. La respuesta aceptada no responde la pregunta como está escrita. Esta pregunta debe volverse a abrir, ya que NO es un duplicado de esta pregunta, que es si los objetos PostGIS pueden trabajar con objetos que no están en el publicesquema. Esa otra pregunta es sobre la instalación de los objetos de extensión PostGIS en un esquema distinto de public. ¡Estas son dos cosas diferentes!
Kenny Evitt

Respuestas:

7

Esto ahora se aborda en el sitio oficial en una página titulada Mover la extensión PostGIS a un esquema diferente . El método correcto es instalar la extensión en public. Esta es la única opción. La extensión ya no admite la reubicación. Lo siguiente es ejecutar los siguientes comandos, (copiado del sitio),

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA postgis;
Evan Carroll
fuente
2
Esto NO responde la pregunta como está escrita; NO debe ser la respuesta aceptada. Se trata claramente de "no tener las tablas y vistas PostGIS predeterminadas en mi nuevo dataesquema (están en el publicesquema dentro de la misma base de datos)". Esta respuesta es útil, y es lo que estaba buscando, pero no está directamente relacionada con la pregunta.
Kenny Evitt
20

Cuando habilita espacialmente una base de datos PostGIS, las funciones relevantes, la tabla SRS y las vistas se colocan en el esquema público, tal como lo indica. Eso no significa que todas o cualquiera de sus propias tablas espaciales necesiten estar en el mismo esquema público. PostGIS seguirá funcionando en todos los datos espaciales en los "nuevos" esquemas.

De hecho, generalmente coloco mis tablas específicas de la aplicación en un esquema separado. De esa manera, si necesita realizar una actualización de versión principal a PostGIS, puede mantener sus copias de seguridad y restauraciones de tablas específicas de la aplicación como un procedimiento separado del que reemplaza las herramientas espaciales.

Entonces, creo que lo estás haciendo bien. Finalmente, en caso de que aún no lo haya hecho, es una buena idea agregar el nuevo esquema a la ruta de búsqueda:

ALTER DATABASE my_db SET search_path = gc, public;

Martin F
fuente
Gracias martin ¿Significa que puedo usar funciones espaciales en tablas en un esquema personalizado que no sea "público"?
alextc
¿Cómo agrega datos a otro esquema? no public? Agregar datos con, por ejemplo. shp2psqlpara test.tabletodavía poner datos public?
knutole
@knutole. Como mencioné, usé ArcCatalog para importar / nuevas clases de entidad. No estoy seguro de si puede usar shp2psql para agregar datos a un esquema personalizado que no sea público.
alextc
1
Esta debería ser la respuesta aceptada.
Kenny Evitt
12
  1. Una de las posibles estrategias organizativas que puede crear con esquemas es permitir que un usuario se ejecute desenfrenadamente en un esquema, pero no pueda estropear las cosas en otro. Entonces, si desea usar esquemas de esta manera, puede hacerlo en la pestaña de privilegios de pgAdmin. Pero no es necesario que lo haga, así que si solo desea mantener los mismos privilegios en múltiples esquemas, está bien.

  2. Según los artículos a los que se vinculó, el problema de mantener todo en público es que cuando se vuelcan datos, es probable que las tablas y las relaciones del sistema se mezclen con sus datos. Si mueve todos sus datos a un nuevo esquema, no tendrá que preocuparse por eso nunca más.

  3. No hay ningun problema. (Como prueba, tenga en cuenta que no tiene que especificar public.spatial_ref_sys cuando desea buscar en la tabla SRS).

L_Holcombe
fuente
6

Un consejo adicional (tal vez ya te encontraste con esto). Probablemente desee agregar el esquema de "datos" a la ruta de búsqueda predeterminada del usuario. Algo como:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

Con respecto a su punto 2, a veces necesita restaurar cuando ya no tiene acceso a la base de datos original. (Esa es una de las razones de las copias de seguridad ...) por lo que es posible que no tenga la oportunidad de mover sus datos a un esquema separado cuando realmente lo necesite.

Micha
fuente
1

Usamos el esquema público para el análisis temporal / resultados de la tabla de desarrollo, luego vamos a esquemas más organizados (¿carpetas?) Para uso permanente.

DPSSpacial
fuente