2010-08-18 19 views
8

Sto tentando di importare uno schema-dump in PostgreSQL con "psql -U nome utente -W nome_db < migrations/schema.psql", lo schema viene importato in parte , ma la console genera errori come "ERRORE: permesso negato per relazione nome_tabella" e "ERRORE: relazione nome_tabella non esiste".PostgreSQL genera errore: "ERRORE: permesso negato per relazione nome_tabella"

ho creato il database in questo modo: "createdb -O nomeutente dbname"

Ci sono solo 7 tavoli da importare, e rompe con solo l'importazione di 3 di loro.

Qualcuno un suggerimento, cosa fare?

+0

Controllare il file di dump per qualsiasi istruzione "ALTER OWNER ..." o "SET SESSION AUTHORIZATION ...". –

risposta

3

Se il backup è stato nel formato "custom" (-Fc), è possibile utilizzare pg_restore invece così si può dire di non applicare le modifiche di proprietà:

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

Tutti gli oggetti saranno creati con "nome utente "come il proprietario.

Blocco che, cercare di grep che il proprietario ALTER e SET AUTORIZZAZIONE SESSIONE comandi nel nuovo file (o tramite uscita grep inviare via tubo a psql). Questi comandi dovrebbero sempre essere su una singola riga nel formato di output di testo normale.

+0

pg_restore non può gestire file di testo SQL, solo i file creati con pg_dump -Fc (che presumibilmente non lo è) – alvherre

+0

Duh. Dimenticato di questo, aggiornerò la mia risposta ad un'altra idea. –

2

A volte questo tipo di problema è causato da problemi di distinzione tra maiuscole e minuscole. PostgreSQL piega in minuscolo tutti gli identificatori non quotati; se le tabelle sono create con nomi quotati contenenti lettere maiuscole, i comandi successivi che non citano i nomi potrebbero non riuscire a trovare la tabella.

Gli errori di autorizzazione possono essere correlati alla stessa cosa, o potrebbe essere qualcos'altro interamente. Difficile da dire senza vedere i comandi in errore.

0

Mentre lavoro sui miei siti Web, ottengo sempre quell'errore perché creerò un tavolo come me, tabella a cui l'utente Apache/PHP deve accedere in seguito.

C'è una tabella denominata pg_class che definisce le tabelle. Questo include una colonna denominata relowner. Cambiandolo con il numero corretto ti daremo la proprietà corretta.

devo dettagli su questa pagina:

http://linux.m2osw.com/table_owner_in_postgresql

Il proprietario ALTER ... potrebbe essere una soluzione migliore che fa la stessa cosa, anche se nelle versioni precedenti di PostgreSQL ha fatto non esiste!

+1

Sono nuovo di PG. Ma stavo pensando di cambiare proprietario. In un ambiente in cui il proprietario è un amministratore ma l'applicazione ha limitato l'accesso al DB, non dovremmo avere un utente con autorizzazioni limitate? – itsols

+0

Sì. Se sei l'implementatore, è una buona idea usare buone autorizzazioni (a patto di non farlo troppo.) Il sistema che ho usato si chiama Drupal e si prevede che abbia pieno diritto nella creazione, modifica ed eliminazione di tabelle. Non è la scelta migliore per il mio punto di vista, ma questo permette agli amministratori di fare tutto direttamente dal loro sito web (cioè installare, aggiornare, rimuovere i moduli che creano, alterano ed eliminano le tabelle ...) Ho un altro sistema, tuttavia, dove il il front-end non ha tali permessi.Tutte le tabelle devono esistere e solo INSERT/UPDATE e talvolta DELETE funzionano ... –

+0

@Alexis_Wilke sì, nel mio caso * dobbiamo * usare le autorizzazioni limitate per l'utente. Guardando il tuo scenario di Drupal, trovo spaventoso dare all'applicazione pieni diritti. Se un utente trova un difetto nella logica del programma, ciò potrebbe significare la fine dei dati. Ad ogni modo, questo è un altro problema ... – itsols

Problemi correlati