La mia app ha iniziato a generare errori quando provo a salvare una determinata classe nel database. Non sono sicuro di cosa abbia causato questo evento - ho avuto tutti i tipi di problemi con i database negli ultimi giorni ....Rails 3.2 Postgres Salva errore "ActiveRecord :: Istruzione non valida: PG :: Errore: ERRORE: Errore di sintassi vicino a" T "nella posizione 5"
In ogni caso, il mio modello sembra funzionare bene (è calcola correttamente tutti i valori di before_save), ma poi prova a salvare nel database e fa esplodere.
SQL (0.8ms) INSERT INTO "portfolios" ("correlation_matrix", "created_at", "data", "mean_return", "std_dev", "updated_at", "weights") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["correlation_matrix", "--- \n- - 1.0\n - -0.4873114574375062\n- - -0.4873114574375062\n - 1.0\n"], ["created_at", Sat, 16 Jun 2012 15:12:35 MDT -06:00], ["data", {"TSX"=>0.5, "VUSTX"=>0.5}], ["mean_return", #<BigDecimal:7fadb119b750,'0.488052381E-1',18(45)>], ["std_dev", #<BigDecimal:7fadb119b598,'0.7668705159 123244E-1',18(45)>], ["updated_at", Sat, 16 Jun 2012 15:12:35 MDT -06:00], ["weights", "--- \nTSX: 0.5\nVUSTX: 0.5\n"]]
Lanci questo errore:
ActiveRecord::StatementInvalid: PG::Error: ERROR: Syntax error near 'T' at position 5
Non ho idea di cosa questo significhi di errore (o che cosa è questo 'T' .....), o anche dove per iniziare la risoluzione dei problemi esso .. .. Qualsiasi aiuto sarebbe apprezzato.
posso pubblicare qualsiasi informazione potrebbe essere necessario per capirlo ....
migrazione Rilevante:
create_table :portfolios do |t|
t.text :weights
t.decimal :mean_return, :precision => 15, :scale => 10
t.decimal :std_dev, :precision => 15, :scale => 10
t.text :correlation_matrix
t.hstore :data
t.timestamps
end
execute "CREATE INDEX portfolios_gin_data_hstore ON portfolios USING GIN(data);"
completa analisi dello stack:
ActiveRecord::StatementInvalid: PG::Error: ERROR: Syntax error near 'T' at position 5
: INSERT INTO "portfolios" ("correlation_matrix", "created_at", "data", "mean_return", "std_dev", "updated_at", "weights") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/postgresql_adapter.rb:1164:in `get_last_result'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/postgresql_adapter.rb:1164:in `exec_cache'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/postgresql_adapter.rb:665:in `block in exec_query'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
from /Users/brandon/.rvm/gems/[email protected]/gems/activesupport-3.2.6/lib/active_support/notifications/instrumenter. rb:20:in `instrument'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/postgresql_adapter.rb:663:in `exec_query'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract/database_statements.rb:63:in `exec_insert'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract/database_statements.rb:90:in `insert'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/relation.rb:66:in `insert'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/persistence.rb:363:in `create'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/timestamp.rb:57:in `create'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/callbacks.rb:268:in `block in create'
from /Users/brandon/.rvm/gems/[email protected]/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:403:in `_run__772785567275930853__create__1186465801021498362__callbacks'
from /Users/brandon/.rvm/gems/[email protected]/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in `__run_callback'
... 11 levels...
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/validations.rb:50:in `save'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/attribute_methods/dirty.rb:22:in `save'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:241:in `block (2 levels) in save'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:295:in `block in with_transaction_returning_status'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2. 6/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:208:in `transaction'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:293:in `with_transaction_returning_status'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:241:in `block in save'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:252:in `rollback_active_record_state!'
from /Users/brandon/.rvm/gems/[email protected]/gems/activerecord-3.2.6/lib/active_record/transactions.rb:240:in `save'
from (irb):33
from /Users/brandon/.rvm/gems/[email protected]/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
from /Users/brandon/.rvm/gems/[email protected]/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
from /Users/brandon/.rvm/gems/[email protected]/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
UPDATE 1 Qualche codice modello come richiesto.
roba macro:
attr_accessible :weights
serialize :correlation_matrix
serialize :weights
has_and_belongs_to_many :securities, :uniq => true
has_and_belongs_to_many :efficient_frontiers
before_validation :format_weights_tickers, :add_securities, :validate_weights, :set_weights_in_hstore, :build_correlation_matrix, :set_mean_return, :set_standard_deviation
validates_presence_of :mean_return, :std_dev, :securities, :correlation_matrix, :weights
validates_numericality_of :mean_return, :std_dev
validate :uniqueness_of_weights
before_destroy :check_for_dependent
scope :by_std_dev, :order => 'std_dev ASC'
nulla e tutto ciò che posso trovare a che fare con la colonna hstore tutto quello che ho davvero usare hstore per è per una ricerca su ticker specifici. Questo funzionava ... non so cosa sia cambiato. Potrei aver aggiornato Postgres (stavo armeggiando con homebrew) o potenzialmente qualcosa cambiato con i binari. Ho provato a tornare alla 3.2.3 ma ho avuto lo stesso errore.
def self.find_by_hstore(search_key, search_value)
where("data @> (:key => :value)", :key => search_key.to_s, :value => search_value.to_s)
end
def set_weights_in_hstore
self.data = {} if self.data.nil?
weights.each_pair {|ticker, weight| self.data[ticker.to_s] = weight}
end
posso postare la totalità del modello se questo è troppo sconnesso. Fammi sapere!
UPDATE # 2 - sto ottenendo errori simili anche altrove ....
Dopo una semplice registrazione utente ....
SQL (10.9ms) INSERT INTO "users" ("admin", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "data", "email", "encrypted_password", "last_email_at", "last_sign_in_at", "last_sign_in_ip", "name", "plan", "remember_created_at", "reset_password_sent_at", "reset_password_token", "selected_portfolio_id", "sign_in_count", "unconfirmed_email", "updated_at", "verified") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23) RETURNING "id" [["admin", false], ["confirmation_sent_at", Sat, 16 Jun 2012 20:37:07 MDT -06:00], ["confirmation_token", "7Xu15pMrV9zTNmofv8bD"], ["confirmed_at", nil], ["created_at", Sat, 16 Jun 2012 20:37:07 MDT -06:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["data", {"min_rebalance_spacing"=>90 days, "max_contact_frequency"=>7 days, "allowable_drift"=>5}], ["email", "[email protected]"], ["encrypted_password", "$2a$10$HNUmlYmcVXbBsyZRFCAB7e8c5mf6S9UOdWr/ZCz10y5Sg4gOh8Zvq"], ["last_email_at", Sat, 16 Jun 2012 20:37:07 MDT -06:00], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["name", "Joe Blow"], ["plan", "basic"], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["selected_portfolio_id", nil], ["sign_in_count", 0], ["unconfirmed_email", nil], ["updated_at", Sat, 16 Jun 2012 20:37:07 MDT -06:00], ["verified", false]]
20:37:07 log.1 | [ef4a7d55fb30e8fb82ac6c860e674bfc] [127.0.0.1] PG::Error: ERROR: Syntax error near 'm' at position 5
20:37:07 log.1 | : INSERT INTO "users" ("admin", "confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "data", "email", "encrypted_password", "last_email_at", "last_sign_in_at", "last_sign_in_ip", "name", "plan", "remember_created_at", "reset_password_sent_at", "reset_password_token", "selected_portfolio_id", "sign_in_count", "unconfirmed_email", "updated_at", "verified") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23) RETURNING "id"
UDPATE 3
Ci sembra essere qualcosa di funky in corso con il mio database/tabella utente. Ho il seguente errore durante il caricamento l'ambiente in una migrazione:
rake aborted!
PG::Error: ERROR: relation "users" does not exist
LINE 4: WHERE a.attrelid = '"users"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"users"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
I Suppongo che sia la "T" in "TSX". Come è la tua classe di modello? –
È abbastanza grande ... non so esattamente cosa pubblicare. Avete qualche idea su quale potrebbe essere il problema? Quindi potrei postare del codice rilevante .... I bit TSX appaiono sempre nelle stringhe, quindi quale potrebbe essere il problema? Qualcosa con HStore? – Brandon
Altrimenti, ha problemi con "[" std_dev ", #]" ?? Questo è ciò che è in posizione # 5 .... ma questo è solo un semplice numero di Jane in una colonna di database decimale ... Arg! (Qual è lo spazio tra xxx159 e 123244? Però?) –
Brandon