Mi aplicación ha comenzado a arrojar errores cuando intento guardar una clase en particular en la base de datos. No estoy seguro de qué fue lo que provocó que esto comenzara a suceder. He tenido todo tipo de problemas con la base de datos durante los últimos días ...Rails 3.2 Error de Error de Postgres "ActiveRecord :: StatementInvalid: PG :: Error: ERROR: Error de sintaxis cerca de 'T' en la posición 5"
En cualquier caso, mi modelo parece estar funcionando bien (es calculando correctamente todos los valores before_save), pero luego intenta guardar en la base de datos y explota.
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"]]
Lanza este error:
ActiveRecord::StatementInvalid: PG::Error: ERROR: Syntax error near 'T' at position 5
no tengo idea de lo que significa este error (o lo que es esta 'T' .....), o incluso por dónde empezar a solucionar problemas que .. .. Cualquier ayuda sería apreciada.
me pueden enviar cualquier información que pueda ser necesaria para resolver esto ....
migración Relevante:
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);"
completo seguimiento de la pila:
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>'
ACTUALIZA 1 Algunos modelos de código según lo solicitado.
cosas 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'
cualquier cosa y todo lo que puedo encontrar que ver con la columna de la hstore todo lo que realmente utilizo para hstore es para una búsqueda de teletipos específicos. Esto solía funcionar ... No sé qué cambió. Pude haber actualizado Postgres (estaba jugando con homebrew) o potencialmente algo cambió con los rieles. Intenté volver a 3.2.3 pero obtuve el mismo error.
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
puedo publicar la totalidad del modelo si esto es demasiado inconexo. ¡Házmelo saber!
ACTUALIZACIÓN # 2 - Estoy recibiendo errores similares en otros lugares también ....
Después de un simple registro de usuario ....
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
Hay parece ser algo moderno con mi base de datos/tabla de usuarios. Recibo el siguiente error al cargar el entorno en una migración:
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 Supongo que es la "T" en "TSX". ¿Cómo se ve tu clase de modelo? –
Es bastante grande ... no estoy seguro exactamente qué publicar. ¿Tiene alguna idea de cuál podría ser el problema? Entonces podría publicar algún código relevante ... Los bits TSX siempre aparecen en cadenas, así que ¿cuál podría ser el problema? Algo con HStore? – Brandon
Alernatively, ¿está teniendo problemas con "[" std_dev ", #]" ?? Eso es lo que está en la posición # 5 ... pero este es solo un número simple de jane en una columna de base de datos decimal ... Arg! (¿Qué hay con el espacio entre xxx159 y 123244?)? –
Brandon