Domanda

Ho una migrazione che viene eseguito uno script SQL per creare una nuova Postgres schema.Quando si crea un nuovo database Postgres per impostazione predefinita crea uno schema chiamato 'pubblico', che è il principale schema di noi.La migrazione per creare il nuovo schema di database sembra funzionare bene, però il problema si verifica dopo la migrazione ha eseguito, quando rotaie tenta di aggiornare il 'schema_info' la tabella che si basa su di esso, dice che non esiste, come se si sta cercando nel nuovo schema di database e non il valore di default 'pubblico' schema in cui la tabella è in realtà.

Qualcuno sa come posso dire rotaie a guardare il 'pubblico' schema di questo tavolo?

Esempio di SQL essere eseguito:~

CREATE SCHEMA new_schema;
COMMENT ON SCHEMA new_schema IS 'this is the new Postgres database schema to sit along side the "public" schema';
-- various tables, triggers and functions created in new_schema

Errore generata:~

RuntimeError: ERROR C42P01  Mrelation "schema_info" does not exist
L221    RRangeVarGetRelid: UPDATE schema_info SET version = ??

Grazie per il vostro aiuto

Chris Knight

È stato utile?

Soluzione

Beh, questo dipende che cosa il vostro migrazione sembra, che cosa il vostro database.yml appare come e che cosa esattamente si sta cercando di tentativo.Comunque ulteriori informazioni è necessario cambiare i nomi, se è il post di un database di esempio.yml e la migrazione.la migrazione di modificare il search_path per l'adattatore per esempio ?

Ma so che, in generale, guide e postgresql schemi non funzionano bene insieme (ancora?).

Ci sono alcuni luoghi che hanno problemi.Provare a costruire e app che utilizza un solo pg database con 2 camere non-schemi predefiniti uno per dev e uno per prova e mi dica su di esso.(da i seguenti posso già dirvi che non si brucino)

Forse è stato risolto dall'ultima volta che ho giocato con lui, ma quando vedo http://rails.lighthouseapp.com/projects/8994/tickets/390-postgres-adapter-quotes-table-name-breaks-when-non-default-schema-is-used o questo http://rails.lighthouseapp.com/projects/8994/tickets/918-postgresql-tables-not-generating-correct-schema-list o questo in postgresql_adapter.rb

  # Drops a PostgreSQL database
  #
  # Example:
  #   drop_database 'matt_development'
  def drop_database(name) #:nodoc:
    execute "DROP DATABASE IF EXISTS #{name}"
  end

(sì, questo è sbagliato, se si utilizza lo stesso database con schemi diversi per entrambi i dev e test, questo sarebbe caduta in entrambi i database ogni volta che si esegue il test di unità !)

In realtà ho iniziato a scrivere le patch.la prima era per gli indici metodi dell'adattatore che non preoccupano i search_path di finire con il duplicato indici in alcune condizioni, poi ho cominciato a farsi del male da tutto il resto e finito abandonning l'idea di utilizzare gli schemi:Volevo ottenere il mio app fatta e non ho avuto il tempo aggiuntivo necessario per risolvere i problemi che ho avuto utilizzando gli schemi.

Altri suggerimenti

Io non sono sicuro di aver capito quello che stai chiedendo esattamente, ma rake sarà in attesa di aggiornare la versione di Rails schema nel schema_info tabella.Controllare il database.yml file di configurazione, questo è dove la rake sarà la ricerca a trovare la tabella di aggiornamento.

È una possibilità che si sta eseguendo la migrazione a un nuovo Postgres schema di rake ancora riferimento al vecchio?Non sono sicuro, quindi, che una guida profilata la migrazione è di che cosa avete bisogno.Potrebbe essere meglio per creare il vostro task rake invece.

Edit:Se stai riferimento a due diversi database o Postgres schemi, Rails non supportano questo standard migrazioni.Rails assume un database, in modo che le migrazioni da un database a un altro genere, non è possibile.Quando si esegue "rake db:migrate" sembra in realtà al RAILS_ENV variabile di ambiente per trovare il corretto inserimento nel database.yml.Se rake inizia la migrazione guardando lo "sviluppo" ambiente e database config dal database.yml, si aspetta l'aggiornamento di questo ambiente, al fine di migrazione.

Così, avrete probabilmente bisogno di fare questo da fuori le Guide stack in quanto non è possibile riferimento di due database, allo stesso tempo, all'interno di Binari.Ci sono tentativi di plugin per consentire questo, ma sono majorly sporca e non funzionano correttamente.

È possibile utilizzare pg_power.Esso fornisce un ulteriore DSL per la migrazione a creare PostgreSQL schemi e non solo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top