Skip to content

PG::Error: cannot set single row mode when using precompiled version of pg gem #671

Description

@dentarg

(Originally opened at jeremyevans/sequel_pg#60)

This is my code

# frozen_string_literal: true

require "bundler/inline"

gemfile do
  source "https://rubygems.org"
  gem "sequel", "5.96.0"
  gem "sequel_pg", "1.17.2", require: "sequel"
  gem "pg", "1.6.2", force_ruby_platform: %w[1 true].include?(ENV["force_ruby_platform"])
end

DB_NAME = "foo_#{rand(100)}"

url = ENV.fetch("URL") do
  system "createdb #{DB_NAME}"
  "postgres://localhost/#{DB_NAME}"
end

begin
  puts "Connecting to #{url}"
  Sequel.connect(url) do |db|
    puts db.select { version.function }.all
    db.extension :pg_streaming
    db.run "CREATE TABLE foo (id serial)"
    db[:foo].stream.each {}
  end
ensure
  system "dropdb #{DB_NAME}"
end

This works

$ force_ruby_platform=1 ruby repro.rb
Connecting to postgres://localhost/foo_81
{version: "PostgreSQL 16.7 (Homebrew) on aarch64-apple-darwin23.6.0, compiled by Apple clang version 16.0.0 (clang-1600.0.26.6), 64-bit"}

This does not

$ force_ruby_platform=0 ruby repro.rb
Connecting to postgres://localhost/foo_73
{version: "PostgreSQL 16.7 (Homebrew) on aarch64-apple-darwin23.6.0, compiled by Apple clang version 16.0.0 (clang-1600.0.26.6), 64-bit"}
/Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:92:in 'Sequel::Postgres::Adapter#set_single_row_mode': PG::Error: cannot set single row mode (Sequel::DatabaseError)
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:92:in 'Sequel::Postgres::Streaming::AdapterMethods#execute_query'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:159:in 'block in Sequel::Postgres::Adapter#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:136:in 'Sequel::Postgres::Adapter#check_disconnect_errors'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:159:in 'Sequel::Postgres::Adapter#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:532:in 'Sequel::Postgres::Database#_execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:49:in 'Sequel::Postgres::Streaming#_execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'block (2 levels) in Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:555:in 'Sequel::Postgres::Database#check_database_errors'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'block in Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/connection_pool/timed_queue.rb:90:in 'Sequel::TimedQueueConnectionPool#hold'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/database/connecting.rb:283:in 'Sequel::Database#synchronize'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/dataset/actions.rb:1197:in 'Sequel::Dataset#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:124:in 'Sequel::Postgres::Streaming::DatasetMethods#fetch_rows'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/dataset/actions.rb:164:in 'Sequel::Dataset#each'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel_pg/sequel_pg.rb:83:in 'Sequel::Postgres::Dataset#each'
	from repro.rb:26:in 'block in <main>'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/database/connecting.rb:56:in 'Sequel::Database.connect'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/core.rb:124:in 'Sequel::SequelMethods#connect'
	from repro.rb:22:in '<main>'
/Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:92:in 'Sequel::Postgres::Adapter#set_single_row_mode': cannot set single row mode (PG::Error)
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:92:in 'Sequel::Postgres::Streaming::AdapterMethods#execute_query'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:159:in 'block in Sequel::Postgres::Adapter#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:136:in 'Sequel::Postgres::Adapter#check_disconnect_errors'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:159:in 'Sequel::Postgres::Adapter#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:532:in 'Sequel::Postgres::Database#_execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:49:in 'Sequel::Postgres::Streaming#_execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'block (2 levels) in Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:555:in 'Sequel::Postgres::Database#check_database_errors'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'block in Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/connection_pool/timed_queue.rb:90:in 'Sequel::TimedQueueConnectionPool#hold'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/database/connecting.rb:283:in 'Sequel::Database#synchronize'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/adapters/postgres.rb:348:in 'Sequel::Postgres::Database#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/dataset/actions.rb:1197:in 'Sequel::Dataset#execute'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel/extensions/pg_streaming.rb:124:in 'Sequel::Postgres::Streaming::DatasetMethods#fetch_rows'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/dataset/actions.rb:164:in 'Sequel::Dataset#each'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel_pg-1.17.2/lib/sequel_pg/sequel_pg.rb:83:in 'Sequel::Postgres::Dataset#each'
	from repro.rb:26:in 'block in <main>'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/database/connecting.rb:56:in 'Sequel::Database.connect'
	from /Users/dentarg/.arm64_rubies/3.4.3/lib/ruby/gems/3.4.0/gems/sequel-5.96.0/lib/sequel/core.rb:124:in 'Sequel::SequelMethods#connect'
	from repro.rb:22:in '<main>'

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions