Rails 3.2 Postgres Save Error «ActiveRecord :: StatementInvalid: PG :: Ошибка: ОШИБКА: синтаксическая ошибка рядом с« T »в позиции 5»

Мое приложение начало выдавать ошибки, когда я пытаюсь сохранить определенный класс в базе данных. Я не уверен, что именно привело к тому, что это начало происходить - у меня были все виды проблем с базами данных в течение последних нескольких дней ...

В любом случае, моя модель работает нормально (она правильно рассчитывает все значения before_save), но затем пытается сохранить ее в базе данных и взрывается.

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

Выдает эту ошибку:

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

Я понятия не имею, что означает эта ошибка (или что это за «T»…), или даже с чего начать ее устранение .... Любая помощь будет принята с благодарностью.

Я могу опубликовать любую информацию, которая может понадобиться, чтобы понять это ....

Соответствующая миграция:

  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);"

Трассировка полного стека:

    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 Код модели по запросу.

макросъемка:

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'

все, что я могу найти, чтобы сделать с колонкой HStore all I really use HStore for is for a search on specific tickers. This used to work... I don't know what changed. I might have upgraded Postgres (I was fiddling around with homebrew) or potentially something changed with rails. I did try going back to 3.2.3 but I got the same 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

Я могу опубликовать всю модель, если она слишком разрозненная. Дай мне знать!

UPDATE #2 - I am getting similar errors elsewhere also....

После простой регистрации пользователя ....

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

Кажется, что-то происходит с моей таблицей базы данных / пользователя. Я получаю следующую ошибку при загрузке среды в процессе миграции:

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

Ответы на вопрос(1)

Ваш ответ на вопрос