2010-08-18 18 views
8

Estoy tratando de importar un esquema de volcado en PostgreSQL con 'psql -U nombre de usuario -W dbname < migrations/schema.psql', el esquema se importa en parte , pero la consola arroja errores como "ERROR: permiso denegado para la relación table_name" y "ERROR: relación table_name no existe".PostgreSQL arroja el error: "ERROR: permiso denegado para la relación table_name"

He creado la base de datos de esta manera: "createdb -O nombre de usuario nombredb"

sólo hay 7 mesas para importar, y se rompe con sólo importar 3 de ellos.

¿Alguien una pista, qué hacer?

+0

Revise el archivo de volcado de cualquier instrucción "ALTER PROPIETARIO ..." o "CONFIGURAR AUTORIZACIÓN DE SESIÓN ...". –

Respuesta

3

Si la copia de seguridad estaba en el formato de "costumbre" (Fc), podría utilizar pg_restore lugar para que pueda decirle que no se apliquen los cambios de propiedad:

pg_restore -U username -W --no-owner --dbname=dbname migrations/schema.psql 

Todos los objetos serán creados con "nombre de usuario "como el dueño.

Al margen de eso, intente convertir los comandos ALTER PROPIETARIO y CONFIGURAR AUTORIZACIÓN DE SESIÓN en un archivo nuevo (oa través de enviar salida grep por conducto a psql). Esos comandos siempre deben estar en una sola línea en el formato de salida de texto sin formato.

+0

pg_restore no puede manejar archivos de texto SQL, solo archivos creados con pg_dump -Fc (que presumiblemente esto no es) – alvherre

+0

Duh. Olvidé eso, actualizaré mi respuesta a otra idea. –

2

A veces este tipo de problema es causado por problemas de mayúsculas y minúsculas. PostgreSQL dobla a minúsculas todos los identificadores sin comillas; si las tablas se crean con nombres entre comillas que contienen letras mayúsculas, los comandos posteriores que no citan los nombres pueden no encontrar la tabla.

Los errores de permiso pueden estar relacionados con la misma cosa, o puede ser algo completamente diferente. Difícil de ver sin ver los comandos que fallan.

0

Mientras trabajo en mis sitios web, obtengo ese error todo el tiempo porque voy a crear una tabla como yo, una tabla a la que debe acceder el usuario de Apache/PHP que se conecta más tarde.

Hay una tabla llamada pg_class que define sus tablas. Esto incluye una columna llamada relowner. Cambiar eso con el número correcto le dará la propiedad correcta.

que tienen detalles en esta página:

http://linux.m2osw.com/table_owner_in_postgresql

El VARIAR ... puede ser una solución mejor que hace lo mismo, aunque en las versiones anteriores de PostgreSQL lo hizo no existe!

+1

Soy nuevo en PG. Pero estaba pensando en cambiar de dueño. En un entorno en el que el propietario es un administrador pero la aplicación tiene acceso restringido a la base de datos, ¿no deberíamos tener un usuario con permisos restringidos? – itsols

+0

Sí. Si usted es el implementador, es una buena idea usar buenos permisos (siempre que no lo haga en exceso). El sistema que he estado usando se llama Drupal y se espera que tenga todos los derechos para crear, alterar y eliminando tablas No es la mejor opción para mi punto de vista, pero eso permite a los administradores hacer todo directamente desde su sitio web (es decir, instalar, actualizar, eliminar módulos que crean, modifican y eliminan tablas ...) Tengo otro sistema, sin embargo, donde el front end no tiene tales permisos.Todas las tablas deben existir y solo INSERTAR/ACTUALIZAR y, a veces, ELIMINAR el trabajo ... –

+0

@Alexis_Wilke sí, en mi opinión, * debemos * utilizar permisos restringidos para el usuario. En cuanto a su escenario de Drupal, me da miedo darle a la aplicación todos los derechos. Si un usuario encuentra un error en la lógica del programa, eso podría significar el final de los datos. De todos modos, este es otro problema ... – itsols

Cuestiones relacionadas