class PG::Connection


See the PG::Result class for information on working with the results of a query.
# res = conn.exec(‘SELECT 1 AS a, 2 AS b, NULL AS c’)
# Equivalent to:
res = conn.exec_params(‘SELECT $1 AS a, $2 AS b, $3 AS c’, [1, 2, nil])
conn = PG::Connection.open(:dbname => ‘test’)
require ‘pg’
For example, to send query to the database on the localhost:
is recommended, but not necessary.
application programmer’s interface to PostgreSQL. Some familiarity with libpq
, the C
The PostgreSQL connection class. The interface for this class is based on

def self.conndefaults_hash

## See also #conndefaults
##
## keyword (as a Symbol).
## Return the Postgres connection defaults structure as a Hash keyed by option
def self.conndefaults_hash
	return self.conndefaults.each_with_object({}) do |info, hash|
		hash[ info[:keyword].to_sym ] = info[:val]
	end
end

def self::parse_connect_args( *args )

## for valid arguments.
## Parse the connection +args+ into a connection-parameter string. See PG::Connection.new
def self::parse_connect_args( *args )
	return '' if args.empty?
	hash_arg = args.last.is_a?( Hash ) ? args.pop : {}
	option_string = ''
	options = {}
	# Parameter 'fallback_application_name' was introduced in PostgreSQL 9.0
	# together with PQescapeLiteral().
	if PG::Connection.instance_methods.find {|m| m.to_sym == :escape_literal }
		options[:fallback_application_name] = $0.sub( /^(.{30}).{4,}(.{30})$/ ){ $1+"..."+$2 }
	end
	if args.length == 1
		case args.first
		when URI, URI.regexp
			uri = URI(args.first)
			options.merge!( Hash[URI.decode_www_form( uri.query )] ) if uri.query
		when /=/
			# Option string style
			option_string = args.first.to_s
		else
			# Positional parameters
			options[CONNECT_ARGUMENT_ORDER.first.to_sym] = args.first
		end
	else
		max = CONNECT_ARGUMENT_ORDER.length
		raise ArgumentError,
			"Extra positional parameter %d: %p" % [ max + 1, args[max] ] if args.length > max
		CONNECT_ARGUMENT_ORDER.zip( args ) do |(k,v)|
			options[ k.to_sym ] = v if v
		end
	end
	options.merge!( hash_arg )
	if uri
		uri.host     = nil if options[:host]
		uri.port     = nil if options[:port]
		uri.user     = nil if options[:user]
		uri.password = nil if options[:password]
		uri.path     = '' if options[:dbname]
		uri.query    = URI.encode_www_form( options )
		return uri.to_s.sub( /^#{uri.scheme}:(?!\/\/)/, "#{uri.scheme}://" )
	else
		option_string += ' ' unless option_string.empty? && options.empty?
		return option_string + options.map { |k,v| "#{k}=#{quote_connstr(v)}" }.join( ' ' )
	end
end

def self::quote_connstr( value )

## Quote the given +value+ for use in a connection-parameter string.
def self::quote_connstr( value )
	return "'" + value.to_s.gsub( /[\\']/ ) {|m| '\\' + m } + "'"
end

def conndefaults

## for details.
## Returns an array of Hashes with connection defaults. See ::conndefaults
def conndefaults
	return self.class.conndefaults
end

def conndefaults_hash

## for details.
## Returns a Hash with connection defaults. See ::conndefaults_hash
def conndefaults_hash
	return self.class.conndefaults_hash
end

def conninfo_hash

## See also #conninfo
##
## keyword (as a Symbol).
## Return the Postgres connection info structure as a Hash keyed by option
def conninfo_hash
	return self.conninfo.each_with_object({}) do |info, hash|
		hash[ info[:keyword].to_sym ] = info[:val]
	end
end

def copy_data( sql, coder=nil )

def copy_data( sql, coder=nil )
	res = exec( sql )
	case res.result_status
	when PGRES_COPY_IN
		begin
			if coder
				old_coder = self.encoder_for_put_copy_data
				self.encoder_for_put_copy_data = coder
			end
			yield res
		rescue Exception => err
			errmsg = "%s while copy data: %s" % [ err.class.name, err.message ]
			put_copy_end( errmsg )
			get_result
			raise
		else
			put_copy_end
			get_last_result
		ensure
			self.encoder_for_put_copy_data = old_coder if coder
		end
	when PGRES_COPY_OUT
		begin
			if coder
				old_coder = self.decoder_for_get_copy_data
				self.decoder_for_get_copy_data = coder
			end
			yield res
		rescue Exception => err
			cancel
			while get_copy_data
			end
			while get_result
			end
			raise
		else
			res = get_last_result
			if !res || res.result_status != PGRES_COMMAND_OK
				while get_copy_data
				end
				while get_result
				end
				raise PG::NotAllCopyDataRetrieved, "Not all COPY data retrieved"
			end
			res
		ensure
			self.decoder_for_get_copy_data = old_coder if coder
		end
	else
		raise ArgumentError, "SQL command is no COPY statement: #{sql}"
	end
end

def ssl_attributes

See also #ssl_attribute

and the type of connection.
The available attributes varies depending on the SSL library being used,

Returns SSL-related information about the connection as key/value pairs

conn.ssl_attributes -> Hash
call-seq:
def ssl_attributes
	ssl_attribute_names.each.with_object({}) do |n,h|
		h[n] = ssl_attribute(n)
	end
end