2012-06-16 15 views
15

Uygulamam, belirli bir sınıfı veritabanına kaydetmeye çalıştığımda hata atmaya başladı. Bunun tam olarak başlamasının tam olarak ne olduğundan emin değilim - Son birkaç gündür her türlü veritabanı sorununu yaşıyorum ....Raylar 3.2 Postgres Kaydetme Hatası "ActiveRecord :: StatementInvalid: PG :: Hata: HATA: 5 konumunda" T "yakınında sözdizimi hatası"

Her halükarda, benim modelim gayet iyi çalışıyor gibi görünüyor. tüm before_save değerlerini düzgün şekilde hesaplar), ancak sonra veritabanına kaydetmeye çalışır ve patlar. Bu hata araçlarının (veya bu 'T' ne .....), hatta bunu giderme başlamak için hiçbir fikrim yok

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

..:

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

bu hatayı Atar .. Herhangi bir yardım takdir edilecektir.

Bunu anlamaya için gerekli ne olursa olsun bilgi gönderebilir

....

İlgili göç:

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

Tam yığın takibi:

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

GÜNCELLEME 1 İstenen bazı model kodları.

makro şeyler: Ben HStore sütununda Gerçekten için HStore kullanan tüm ilgisi bulabilirsiniz

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' 

şey ve her şey belirli Şeritler bir arama içindir. Bu işe yarardı ... Ne değiştiğini bilmiyorum. Postgres'i (homebrew ile uğraşıyordum) veya potansiyel olarak raylarla değiştirilmiş bir şeyi değiştirmiş olabilirim. 3.2.3'e geri dönmeyi denedim ama aynı hatayı aldım. Bu çok tutarsız ise

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 

Ben modelin tamamını gönderebilir. Bilmeme izin ver! Ben

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", "joe[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 .... basit bir kullanıcı kayıt sonrasında

.... başka yerlerde de benzer hatalar alıyorum 3

Orada -

GÜNCELLEME 2.

Benim veritabanı/kullanıcı tablosu ile devam eden bir şey gibi görünüyor. Çevre geçişi yükleme sırasında aşağıdaki hatayı alıyorum:

+0

I "TSX" de "T" olduğunu tahmin ediyorum. Model sınıfınız neye benziyor? –

+0

Oldukça büyük ... tam olarak ne yazacağından emin değilim. Sorunun ne olabileceğine dair bir fikrin var mı? Sonra ilgili bazı kodları gönderebilirim .... TSX bitleri her zaman dizgelerde ortaya çıkıyor, bu yüzden sorun ne olabilir? HStore ile bir şey mi? – Brandon

+0

Alerjik olarak, "[" std_dev ", # ] ile sorun yaşıyor mu? # 5 .... konumunda olan budur, ancak bu ondalık veritabanı sütununda sadece düz bir jane numarasıdır ... Arg! (Xxx159 ve 123244 arasındaki boşlukla ne olur??) – Brandon

cevap

33

Rails 3.2'de benzer bir sorunla karşılaştım. Eğer Raylar bagajı (4.0 doğru çalışma) kullanmıyorsanız, bu doğal hstore anlamıyor - Eğer (activerecord-postgres-hstore taş tarafından sağlanan) bir seri kodlayıcı tanımlamak şöyle gerekir:

class Example < ActiveRecord::Base 
    serialize :data, ActiveRecord::Coders::Hstore 
end 
+0

BU YARDIMCI OLDU! Teşekkürler!! Bunun neden birdenbire bozulduğu hakkında hiçbir fikrim yok. Hatalar olmadan bir süredir Rails 3.2.3 kullanıyordum. 3.2.6'ya yükselttim ve havaya uçtu. Tüm zaman boyunca activerecord-postgres-hstore gem kullanıyorum ... oh iyi. – Brandon

+2

Bu sorun hazırlanan ifadelerle ilişkili gibi görünüyor. Aynı sorunu yaşadım ve eğer hazırlanmış ifadeleri devre dışı bırakırsam ("ready_statements: false", database.yml "kullanarak)" serialize "olmasa bile tekrar çalışır. –

İlgili konular