Rails 3.2 Postgres Save Error “ActiveRecord :: StatementInvalid: PG :: Erro: ERRO: erro de sintaxe perto de 'T' na posição 5”

Meu aplicativo começou a gerar erros quando tento salvar uma classe específica no banco de dados. Eu não tenho certeza exatamente o que causou isso para começar a acontecer - Eu tenho tido todos os tipos de problemas de banco de dados nos últimos dias ....

De qualquer forma, meu modelo parece estar funcionando bem (está calculando corretamente todos os valores de before_save), mas depois tenta salvar no banco de dados e explode.

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"]]

Lança este erro:

ActiveRecord::StatementInvalid: PG::Error: ERROR:  Syntax error near 'T' at position 5

Eu não tenho idéia do que esse erro significa (ou o que isso 'T' é .....), ou mesmo onde começar a solução de problemas .... Qualquer ajuda seria apreciada.

Eu posso postar qualquer informação que possa ser necessária para descobrir isso ...

Migração 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);"

Rastreio de pilha completa:

    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/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/postgresql_adapter.rb:1164:in `get_last_result'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/postgresql_adapter.rb:1164:in `exec_cache'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/postgresql_adapter.rb:665:in `block in exec_query'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activesupport-3.2.6/lib/active_support/notifications/instrumenter.    rb:20:in `instrument'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/postgresql_adapter.rb:663:in `exec_query'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract/database_statements.rb:63:in `exec_insert'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract/database_statements.rb:90:in `insert'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/relation.rb:66:in `insert'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/persistence.rb:363:in `create'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/timestamp.rb:57:in `create'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/callbacks.rb:268:in `block in     create'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:403:in     `_run__772785567275930853__create__1186465801021498362__callbacks'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in     `__run_callback'
... 11 levels...
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/validations.rb:50:in `save'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/attribute_methods/dirty.rb:22:in     `save'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:241:in `block (2     levels) in save'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:295:in `block in     with_transaction_returning_status'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.    6/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:208:in     `transaction'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:293:in     `with_transaction_returning_status'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:241:in `block in     save'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:252:in     `rollback_active_record_state!'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/activerecord-3.2.6/lib/active_record/transactions.rb:240:in `save'
  from (irb):33
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
  from /Users/brandon/.rvm/gems/ruby-1.9.3-p194@myapp/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>'

ATUALIZAÇÃO 1 Algum código de modelo, conforme solicitado.

material 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'

tudo e qualquer coisa que eu possa encontrar com a coluna HStoretudo o que eu realmente uso o HStore é para uma busca em tickers específicos. Isso costumava funcionar ... Eu não sei o que mudou. Eu poderia ter atualizado o Postgres (eu estava brincando com o homebrew) ou potencialmente algo mudou com os trilhos. Eu tentei voltar para o 3.2.3, mas recebi o mesmo erro.

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

Eu posso postar a totalidade do modelo se isso for muito desarticulado. Avise-se me!

ATUALIZAÇÃO # 2 - Estou recebendo erros semelhantes em outros lugares também ....

Após uma simples inscrição do usuário ....

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", "$2atudo e qualquer coisa que eu possa encontrar com a coluna HStoreHNUmlYmcVXbBsyZRFCAB7e8c5mf6S9UOdWr/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

Parece haver algo estranho acontecendo com minha tabela de banco de dados / usuário. Eu recebo o seguinte erro durante o carregamento do ambiente em uma migração:

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

questionAnswers(1)

yourAnswerToTheQuestion