Tag: postgresql

如何修复PG :: DuplicatePstatement:ERROR?

我想知道如何防止这种类型的错误。 到目前为止,我尝试通过AWS Opsworks上的数据库配置禁用预准备语句: 例如: 数据库配置 }, “deploy”: { “app_name”: { “database”: { “adapter”: “postgresql”, “prepared_statements”: false, “username”: “username”, “database”: “db_name_production”, “host”: “cool_host.com”, “password”: “easy” }, 错误日志 PG::DuplicatePstatement: ERROR: prepared statement “a6” already exists : INSERT INTO “polls” (“answer_type”, “auto_enable”, “can_have_correct_answer”, “created_at”, “de”, “en”, “es”, “event_id”, “game_card_length”, “game_card_start”, “id_language_code”, “is_custom_question”, “ja”, “language_id”, “points_award”, “poll_upload_id”, “pop_up_length”, “pop_up_start”, […]

处理用户发送的“字符串包含空字节”

我有一个API控制器,它接收有关媒体文件的路径和id3标签的信息,并使用PostgreSQL / Rails将它们保存到Active Record实例。 但有时用户会发送字符串,例如: “genre”=>”Hip-Hop\u0000Hip-Hop/Rap” 当试图坚持save时,Rails / Postgres对此并不十分满意: An ArgumentError occurred in internals#receive: string contains null byte activerecord (3.2.21) lib/active_record/connection_adapters/postgresql_adapter.rb:1172:in `send_query_prepared’ 如何在Ruby中清除此字符串以完全删除空字节?

Rails“ActiveRecord_Associations_CollectionProxy的未定义方法”

我有这个型号: class Student < ActiveRecord::Base has_many :tickets has_many :movies, through: :tickets end class Movie < ActiveRecord::Base has_many :tickets, dependent: :destroy has_many :students, through: :tickets belongs_to :cinema end class Ticket < ActiveRecord::Base belongs_to :movie, counter_cache: true belongs_to :student end class Cinema < ActiveRecord::Base has_many :movies, dependent: :destroy has_many :students, through: :movies has_many :schools, dependent: :destroy has_many […]

如何使用ruby将单个记录写入Redshift数据库?

目前,我们有一个脚本可以解析数据并将其一次上传到mysql数据库。 最近,我们决定改用aws redshift。 有没有办法可以使用我的亚马逊登录凭据和我的红移群集信息将这些记录直接上传到redshift数据库? 我在网上找到的所有指南都建议从S3存储桶导入文本或csv文件,但这对我的用例来说不太实用。 谢谢你的帮助 我想做这样的事情: require ‘aws-sdk’ require ‘pg’ AWS.config(access_key_id: ‘my_access_key_id’, secret_access_key: ‘my_secret_access_key’, region: ‘us-west-2’) redshift = AWS::Redshift.new credentials = { driver: “org.postresql.Driver” url: “my_connect_url” username: “my_username” password: “my_password” database: “my_db” } db = redshift.connect(credentials) # **NOT A REAL LINE OF CODE, I WISH IT WAS** sql_query = “INSERT INTO my_table (my_column) VALUES […]

错误:必须是语言plpgsql的所有者

我正在使用PostgreSQL v9.0.1和Rails (以及它的deps)@ v2.3.8 ,由于使用了postgres的全文function,我有一个表定义为: CREATE TABLE affiliate_products( id integer NOT NULL, 名字字符变化(255), 模型字符变化(255), 说明文字, 价格数字(9,2), created_at时间戳没有时区, 没有时区的updated_at时间戳, textsearch_vector tsvector, ); 注意最后一行,这可以确保活动记录无法使用标准模式转储器进行处理,因此我必须在./config/environment.rb设置config.active_record.schema_format = :sql ; 并使用rake db:test:clone_structure而不是rake db:test:clone 。 这些都不是太显着,只是不方便 – 但是rake db:test:clone_structure失败并出现错误: ERROR: must be owner of language plpgsql 因为我得到的./db/development_schema.sql #16行: CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; 在PostgreSQL v9.0+下,超级用户将语言plpsql安装到初始模板,然后该模板可用于新创建的模式。 我不能在没有解决这个问题的情况下对这个项目运行测试,甚至手动编辑./db/development_schema.sql也是徒劳的,因为每次运行rake db:test:clone_structure时都会重新生成它(并被rake db:test:clone忽略)。 我希望有人可以对此有所了解吗? 注意:我使用了pg […]

Rails / postgres,’外键’存储在数组中以创建1-many关联

postgres数组可以用来在rails(4)中创建一对多/ has_many关联吗? 我知道外键类型数组是不可能的。 示例:任务有多个受理人。 传统上我会使用关联表来解决这个问题:tasks-> assignees-> users。 使用数组,这不是必需的,因为可以存储多个“外键”。 然后可以使用以下查询来获取分配给我的所有任务: select * from tasks where ? IN tasks.assignees

ActiveRecord的:: StatementInvalid。 PG错误

我试图使用Project.find(id)从Project模型中找到一个项目,但它给了我ActiveRecord::StatementInvalid错误 完全追踪 – PG::Error: ERROR: prepared statement “a1” already exists : SELECT COUNT(*) FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind in (‘v’,’r’) AND c.relname = $1 AND n.nspname = ANY (current_schemas(false)) /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1180:in `prepare’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1180:in `prepare_statement’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1144:in `exec_cache’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord- 3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:664:in `block in exec_query’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activesupport-3.2.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument’ /home/deploy/.rvm/gems/ruby-1.9.2-p290@submit_contactpl/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:275:in […]

尝试使用Rails和PostgreSQL生成模型时,命令会挂起而不会出错

使用此命令时: rails generate model Event name:string 什么都没发生,我必须CTRL + c。 我正在使用的版本是: Ruby 2.1.1p76 Rails 4.1.0 PostgreSQL 9.3.4 Mac OS X 10.9.3 我已经validationPostgres正在工作,我可以通过运行psql easyEventTracker_development连接到它。 我通过运行rails new easyEventTracker -d postgresql设置我的rails项目 运行rake db:create ,我收到以下消息: easyEventTracker_development已经存在 easyEventTracker_test已经存在 database.yml文件的内容: default: &default adapter: postgresql encoding: unicode pool: 5 development: <<: *default database: easyEventTracker_development test: <<: *default database: easyEventTracker_test production: <<: *default database: […]

ActiveRecord可以远程连接到PostgreSQL并保护数据库密码吗?

我在远程VPS服务器(CentOS 5)上有一个PostgreSQL数据库,我想连接到我的本地Mac笔记本电脑连接到它的Rails应用程序。 在我的笔记本电脑上,我安装了ActiveRecord PostgreSQL适配器 – postgres (0.7.9.2008.01.28) 。 我在PostgreSQL文档中读到: 基于密码的身份validation方法是md5,crypt和密码。 除了通过连接发送密码的方式外,这些方法的操作类似:MD5散列,加密加密和明文。 […] 如果您一直担心密码“嗅探”攻击,那么首选md5 …应该避免使用普通密码,特别是对于通过开放Internet进行的连接(除非您在连接周围使用SSL,SSH或其他通信安全包装)。 在标准的Rails database.yml ,对于localhost连接会有这样的东西…… development: adapter: postgresql database: journalapp_development username: xxx password: yyy host: localhost 但是PostgreSQL文档中讨论的身份validation方法没有任何内容。 有没有像“ auth_method: md5 ”这样的选项吗?

Rails:更快地对许多记录执行更新

在我们的Rails 3.2.13应用程序(Heroku中的Ruby 2.0.0 + Postgres)中,我们经常从API中检索大量订单数据,然后我们需要更新或创建数据库中的每个订单,以及关联。 单个订单创建/更新自身加上约。 10-15个关联对象,我们一次最多导入500个订单。 下面的代码有效,但问题是它在速度方面根本没有效率。 创建/更新500条记录大约需要 1分钟,生成6500多个db查询! def add_details(shop, shopify_orders) shopify_orders.each do |shopify_order| order = Order.where(:order_id => shopify_order.id.to_s, :shop_id => shop.id).first_or_create order.update_details(order,shopify_order,shop) #This calls update_attributes for the Order ShippingLine.add_details(order, shopify_order.shipping_lines) LineItem.add_details(order, shopify_order.line_items) Taxline.add_details(order, shopify_order.tax_lines) Fulfillment.add_details(order, shopify_order.fulfillments) Note.add_details(order, shopify_order.note_attributes) Discount.add_details(order, shopify_order.discount_codes) billing_address = shopify_order.billing_address rescue nil if !billing_address.blank? BillingAddress.add_details(order, billing_address) end shipping_address = […]