pg 0.20.0-x64-mingw32 → 0.21.0-x64-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/ChangeLog +145 -44
  5. data/History.rdoc +13 -0
  6. data/Manifest.txt +1 -18
  7. data/README.rdoc +1 -1
  8. data/Rakefile +5 -5
  9. data/ext/pg.c +1 -1
  10. data/ext/pg_binary_decoder.c +1 -1
  11. data/ext/pg_binary_encoder.c +1 -1
  12. data/ext/pg_connection.c +1 -1
  13. data/ext/pg_result.c +12 -6
  14. data/ext/pg_text_decoder.c +1 -1
  15. data/ext/pg_text_encoder.c +1 -1
  16. data/ext/pg_type_map.c +1 -1
  17. data/ext/pg_type_map_all_strings.c +1 -1
  18. data/ext/pg_type_map_by_class.c +1 -1
  19. data/ext/pg_type_map_by_column.c +1 -1
  20. data/ext/pg_type_map_by_mri_type.c +1 -1
  21. data/ext/pg_type_map_by_oid.c +1 -1
  22. data/ext/pg_type_map_in_ruby.c +1 -1
  23. data/ext/util.c +1 -1
  24. data/lib/2.0/pg_ext.so +0 -0
  25. data/lib/2.1/pg_ext.so +0 -0
  26. data/lib/2.2/pg_ext.so +0 -0
  27. data/lib/2.3/pg_ext.so +0 -0
  28. data/lib/2.4/pg_ext.so +0 -0
  29. data/lib/libpq.dll +0 -0
  30. data/lib/pg.rb +8 -6
  31. data/lib/pg/connection.rb +0 -4
  32. data/lib/pg/deprecated_constants.rb +21 -0
  33. data/lib/pg/result.rb +0 -3
  34. data/spec/pg/result_spec.rb +4 -4
  35. metadata +40 -63
  36. metadata.gz.sig +0 -0
  37. data/sample/array_insert.rb +0 -20
  38. data/sample/async_api.rb +0 -106
  39. data/sample/async_copyto.rb +0 -39
  40. data/sample/async_mixed.rb +0 -56
  41. data/sample/check_conn.rb +0 -21
  42. data/sample/copyfrom.rb +0 -81
  43. data/sample/copyto.rb +0 -19
  44. data/sample/cursor.rb +0 -21
  45. data/sample/disk_usage_report.rb +0 -186
  46. data/sample/issue-119.rb +0 -94
  47. data/sample/losample.rb +0 -69
  48. data/sample/minimal-testcase.rb +0 -17
  49. data/sample/notify_wait.rb +0 -72
  50. data/sample/pg_statistics.rb +0 -294
  51. data/sample/replication_monitor.rb +0 -231
  52. data/sample/test_binary_values.rb +0 -33
  53. data/sample/wal_shipper.rb +0 -434
  54. data/sample/warehouse_partitions.rb +0 -320
@@ -1,39 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
- require 'stringio'
5
-
6
- # Using COPY asynchronously
7
-
8
- $stderr.puts "Opening database connection ..."
9
- conn = PG.connect( :dbname => 'test' )
10
- conn.setnonblocking( true )
11
-
12
- socket = conn.socket_io
13
-
14
- $stderr.puts "Running COPY command ..."
15
- buf = ''
16
- conn.transaction do
17
- conn.send_query( "COPY logs TO STDOUT WITH csv" )
18
- buf = nil
19
-
20
- # #get_copy_data returns a row if there's a whole one to return, false
21
- # if there isn't one but the COPY is still running, or nil when it's
22
- # finished.
23
- begin
24
- $stderr.puts "COPY loop"
25
- conn.consume_input
26
- while conn.is_busy
27
- $stderr.puts " ready loop"
28
- select( [socket], nil, nil, 5.0 ) or
29
- raise "Timeout (5s) waiting for query response."
30
- conn.consume_input
31
- end
32
-
33
- buf = conn.get_copy_data
34
- $stdout.puts( buf ) if buf
35
- end until buf.nil?
36
- end
37
-
38
- conn.finish
39
-
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
-
5
- $stdout.sync = true
6
-
7
- # This is a example of how to mix and match synchronous and async APIs. In this case,
8
- # the connection to the server is made syncrhonously, and then queries are
9
- # asynchronous.
10
-
11
- TIMEOUT = 5.0 # seconds to wait for an async operation to complete
12
- CONN_OPTS = {
13
- :host => 'localhost',
14
- :dbname => 'test',
15
- }
16
-
17
- # Output progress messages
18
- def output_progress( msg )
19
- puts ">>> #{msg}\n"
20
- end
21
-
22
- # Start the (synchronous) connection
23
- output_progress "Starting connection..."
24
- conn = PG.connect( CONN_OPTS ) or abort "Unable to create a new connection!"
25
-
26
- abort "Connect failed: %s" % [ conn.error_message ] unless conn.status == PG::CONNECTION_OK
27
-
28
- # Now grab a reference to the underlying socket to select() on while the query is running
29
- socket = conn.socket_io
30
-
31
- # Send the (asynchronous) query
32
- output_progress "Sending query"
33
- conn.send_query( "SELECT * FROM pg_stat_activity" )
34
-
35
- # Fetch results until there aren't any more
36
- loop do
37
- output_progress " waiting for a response"
38
-
39
- # Buffer any incoming data on the socket until a full result is ready.
40
- conn.consume_input
41
- while conn.is_busy
42
- output_progress " waiting for data to be available on %p..." % [ socket ]
43
- select( [socket], nil, nil, TIMEOUT ) or
44
- raise "Timeout waiting for query response."
45
- conn.consume_input
46
- end
47
-
48
- # Fetch the next result. If there isn't one, the query is finished
49
- result = conn.get_result or break
50
-
51
- output_progress "Query result:\n%p\n" % [ result.values ]
52
- end
53
-
54
- output_progress "Done."
55
- conn.finish
56
-
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # vim: set nosta noet ts=4 sw=4:
3
- # encoding: utf-8
4
-
5
- require 'pg'
6
-
7
- # This is a minimal example of a function that can test an existing PG::Connection and
8
- # reset it if necessary.
9
-
10
- def check_connection( conn )
11
- begin
12
- conn.exec( "SELECT 1" )
13
- rescue PG::Error => err
14
- $stderr.puts "%p while testing connection: %s" % [ err.class, err.message ]
15
- conn.reset
16
- end
17
- end
18
-
19
- conn = PG.connect( dbname: 'test' )
20
- check_connection( conn )
21
-
@@ -1,81 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
- require 'stringio'
5
-
6
- $stderr.puts "Opening database connection ..."
7
- conn = PG.connect( :dbname => 'test' )
8
-
9
- conn.exec( <<END_SQL )
10
- DROP TABLE IF EXISTS logs;
11
- CREATE TABLE logs (
12
- client_ip inet,
13
- username text,
14
- ts timestamp,
15
- request text,
16
- status smallint,
17
- bytes int
18
- );
19
- END_SQL
20
-
21
- copy_data = StringIO.new( <<"END_DATA" )
22
- "127.0.0.1","","30/Aug/2010:08:21:24 -0700","GET /manual/ HTTP/1.1",404,205
23
- "127.0.0.1","","30/Aug/2010:08:21:24 -0700","GET /favicon.ico HTTP/1.1",404,209
24
- "127.0.0.1","","30/Aug/2010:08:21:24 -0700","GET /favicon.ico HTTP/1.1",404,209
25
- "127.0.0.1","","30/Aug/2010:08:22:29 -0700","GET /manual/ HTTP/1.1",200,11094
26
- "127.0.0.1","","30/Aug/2010:08:22:38 -0700","GET /manual/index.html HTTP/1.1",200,725
27
- "127.0.0.1","","30/Aug/2010:08:27:56 -0700","GET /manual/ HTTP/1.1",200,11094
28
- "127.0.0.1","","30/Aug/2010:08:27:57 -0700","GET /manual/ HTTP/1.1",200,11094
29
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/index.html HTTP/1.1",200,7709
30
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/images/feather.gif HTTP/1.1",200,6471
31
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/images/left.gif HTTP/1.1",200,60
32
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/style/css/manual.css HTTP/1.1",200,18674
33
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/style/css/manual-print.css HTTP/1.1",200,13200
34
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/images/favicon.ico HTTP/1.1",200,1078
35
- "127.0.0.1","","30/Aug/2010:08:28:06 -0700","GET /manual/style/css/manual-loose-100pc.css HTTP/1.1",200,3065
36
- "127.0.0.1","","30/Aug/2010:08:28:14 -0700","OPTIONS * HTTP/1.0",200,0
37
- "127.0.0.1","","30/Aug/2010:08:28:15 -0700","OPTIONS * HTTP/1.0",200,0
38
- "127.0.0.1","","30/Aug/2010:08:28:47 -0700","GET /manual/mod/directives.html HTTP/1.1",200,33561
39
- "127.0.0.1","","30/Aug/2010:08:28:53 -0700","GET /manual/mod/mpm_common.html HTTP/1.1",200,67683
40
- "127.0.0.1","","30/Aug/2010:08:28:53 -0700","GET /manual/images/down.gif HTTP/1.1",200,56
41
- "127.0.0.1","","30/Aug/2010:08:28:53 -0700","GET /manual/images/up.gif HTTP/1.1",200,57
42
- "127.0.0.1","","30/Aug/2010:09:19:58 -0700","GET /manual/mod/mod_log_config.html HTTP/1.1",200,28307
43
- "127.0.0.1","","30/Aug/2010:09:20:19 -0700","GET /manual/mod/core.html HTTP/1.1",200,194144
44
- "127.0.0.1","","30/Aug/2010:16:02:56 -0700","GET /manual/ HTTP/1.1",200,11094
45
- "127.0.0.1","","30/Aug/2010:16:03:00 -0700","GET /manual/ HTTP/1.1",200,11094
46
- "127.0.0.1","","30/Aug/2010:16:06:16 -0700","GET /manual/mod/mod_dir.html HTTP/1.1",200,10583
47
- "127.0.0.1","","30/Aug/2010:16:06:44 -0700","GET /manual/ HTTP/1.1",200,7709
48
- END_DATA
49
-
50
- ### You can test the error case from the database side easily by
51
- ### changing one of the numbers at the end of one of the above rows to
52
- ### something non-numeric like "-".
53
-
54
- $stderr.puts "Running COPY command with data ..."
55
- buf = ''
56
- conn.transaction do
57
- conn.exec( "COPY logs FROM STDIN WITH csv" )
58
- begin
59
- while copy_data.read( 256, buf )
60
- ### Uncomment this to test error-handling for exceptions from the reader side:
61
- # raise Errno::ECONNRESET, "socket closed while reading"
62
- $stderr.puts " sending %d bytes of data..." % [ buf.length ]
63
- until conn.put_copy_data( buf )
64
- $stderr.puts " waiting for connection to be writable..."
65
- sleep 0.1
66
- end
67
- end
68
- rescue Errno => err
69
- errmsg = "%s while reading copy data: %s" % [ err.class.name, err.message ]
70
- conn.put_copy_end( errmsg )
71
- else
72
- conn.put_copy_end
73
- while res = conn.get_result
74
- $stderr.puts "Result of COPY is: %s" % [ res.res_status(res.result_status) ]
75
- end
76
- end
77
- end
78
-
79
-
80
- conn.finish
81
-
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
- require 'stringio'
5
-
6
- # An example of how to stream data to your local host from the database as CSV.
7
-
8
- $stderr.puts "Opening database connection ..."
9
- conn = PG.connect( :dbname => 'test' )
10
-
11
- $stderr.puts "Running COPY command ..."
12
- buf = ''
13
- conn.transaction do
14
- conn.exec( "COPY logs TO STDOUT WITH csv" )
15
- $stdout.puts( buf ) while buf = conn.get_copy_data
16
- end
17
-
18
- conn.finish
19
-
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
-
5
- # An example of how to use SQL cursors. This is mostly a straight port of
6
- # the cursor portion of testlibpq.c from src/test/examples.
7
-
8
- $stderr.puts "Opening database connection ..."
9
- conn = PG.connect( :dbname => 'test' )
10
-
11
- #
12
- conn.transaction do
13
- conn.exec( "DECLARE myportal CURSOR FOR select * from pg_database" )
14
- res = conn.exec( "FETCH ALL IN myportal" )
15
-
16
- puts res.fields.collect {|fname| "%-15s" % [fname] }.join( '' )
17
- res.values.collect do |row|
18
- puts row.collect {|col| "%-15s" % [col] }.join( '' )
19
- end
20
- end
21
-
@@ -1,186 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # vim: set noet nosta sw=4 ts=4 :
3
- #
4
- # Quickly dump size information for a given database.
5
- # Top twenty objects, and size per schema.
6
- #
7
- # Mahlon E. Smith <mahlon@martini.nu>
8
- #
9
- # Based on work by Jeff Davis <ruby@j-davis.com>.
10
- #
11
-
12
-
13
- begin
14
- require 'ostruct'
15
- require 'optparse'
16
- require 'etc'
17
- require 'pg'
18
-
19
- rescue LoadError # 1.8 support
20
- unless Object.const_defined?( :Gem )
21
- require 'rubygems'
22
- retry
23
- end
24
- raise
25
- end
26
-
27
- SCRIPT_VERSION = %q$Id: disk_usage_report.rb,v 76ebae01c937 2013/03/26 17:50:02 ged $
28
-
29
-
30
- ### Gather data and output it to $stdout.
31
- ###
32
- def report( opts )
33
- db = PG.connect(
34
- :dbname => opts.database,
35
- :host => opts.host,
36
- :port => opts.port,
37
- :user => opts.user,
38
- :password => opts.pass,
39
- :sslmode => 'prefer'
40
- )
41
-
42
- # -----------------------------------------
43
-
44
- db_info = db.exec %Q{
45
- SELECT
46
- count(oid) AS num_relations,
47
- pg_size_pretty(pg_database_size('#{opts.database}')) AS dbsize
48
- FROM
49
- pg_class
50
- }
51
-
52
- puts '=' * 70
53
- puts "Disk usage information for %s: (%d relations, %s total)" % [
54
- opts.database,
55
- db_info[0]['num_relations'],
56
- db_info[0]['dbsize']
57
- ]
58
- puts '=' * 70
59
-
60
- # -----------------------------------------
61
-
62
- top_twenty = db.exec %q{
63
- SELECT
64
- relname AS name,
65
- relkind AS kind,
66
- pg_size_pretty(pg_relation_size(pg_class.oid)) AS size
67
- FROM
68
- pg_class
69
- ORDER BY
70
- pg_relation_size(pg_class.oid) DESC
71
- LIMIT 20
72
- }
73
-
74
- puts 'Top twenty objects by size:'
75
- puts '-' * 70
76
- top_twenty.each do |row|
77
- type = case row['kind']
78
- when 'i'; 'index'
79
- when 't'; 'toast'
80
- when 'r'; 'table'
81
- when 'S'; 'sequence'
82
- else; '???'
83
- end
84
-
85
- puts "%40s %10s (%s)" % [ row['name'], row['size'], type ]
86
- end
87
- puts '-' * 70
88
-
89
- # -----------------------------------------
90
-
91
- schema_sizes = db.exec %q{
92
- SELECT
93
- table_schema,
94
- pg_size_pretty( CAST( SUM(pg_total_relation_size(table_schema || '.' || table_name)) AS bigint)) AS size
95
- FROM
96
- information_schema.tables
97
- GROUP BY
98
- table_schema
99
- ORDER BY
100
- CAST( SUM(pg_total_relation_size(table_schema || '.' || table_name)) AS bigint ) DESC
101
- }
102
-
103
-
104
- puts 'Size per schema:'
105
- puts '-' * 70
106
- schema_sizes.each do |row|
107
- puts "%20s %10s" % [ row['table_schema'], row['size'] ]
108
- end
109
- puts '-' * 70
110
- puts
111
-
112
- db.finish
113
- end
114
-
115
-
116
- ### Parse command line arguments. Return a struct of global options.
117
- ###
118
- def parse_args( args )
119
- options = OpenStruct.new
120
- options.database = Etc.getpwuid( Process.uid ).name
121
- options.host = '127.0.0.1'
122
- options.port = 5432
123
- options.user = Etc.getpwuid( Process.uid ).name
124
- options.sslmode = 'prefer'
125
- options.interval = 5
126
-
127
- opts = OptionParser.new do |opts|
128
- opts.banner = "Usage: #{$0} [options]"
129
-
130
- opts.separator ''
131
- opts.separator 'Connection options:'
132
-
133
- opts.on( '-d', '--database DBNAME',
134
- "specify the database to connect to (default: \"#{options.database}\")" ) do |db|
135
- options.database = db
136
- end
137
-
138
- opts.on( '-h', '--host HOSTNAME', 'database server host' ) do |host|
139
- options.host = host
140
- end
141
-
142
- opts.on( '-p', '--port PORT', Integer,
143
- "database server port (default: \"#{options.port}\")" ) do |port|
144
- options.port = port
145
- end
146
-
147
- opts.on( '-U', '--user NAME',
148
- "database user name (default: \"#{options.user}\")" ) do |user|
149
- options.user = user
150
- end
151
-
152
- opts.on( '-W', 'force password prompt' ) do |pw|
153
- print 'Password: '
154
- begin
155
- system 'stty -echo'
156
- options.pass = gets.chomp
157
- ensure
158
- system 'stty echo'
159
- puts
160
- end
161
- end
162
-
163
- opts.separator ''
164
- opts.separator 'Other options:'
165
-
166
- opts.on_tail( '--help', 'show this help, then exit' ) do
167
- $stderr.puts opts
168
- exit
169
- end
170
-
171
- opts.on_tail( '--version', 'output version information, then exit' ) do
172
- puts SCRIPT_VERSION
173
- exit
174
- end
175
- end
176
-
177
- opts.parse!( args )
178
- return options
179
- end
180
-
181
-
182
- if __FILE__ == $0
183
- opts = parse_args( ARGV )
184
- report( opts )
185
- end
186
-
@@ -1,94 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pg'
4
-
5
- # This is another example of how to use COPY FROM, this time as a
6
- # minimal test case used to try to figure out what was going on in
7
- # an issue submitted from a user:
8
- #
9
- # https://bitbucket.org/ged/ruby-pg/issue/119
10
- #
11
-
12
- conn = PG.connect( dbname: 'test' )
13
- table_name = 'issue_119'
14
- field_list = %w[name body_weight brain_weight]
15
- method = 0
16
- options = { truncate: true }
17
- sql_parameters = ''
18
-
19
- conn.set_error_verbosity( PG::PQERRORS_VERBOSE )
20
- conn.exec( "DROP TABLE IF EXISTS #{table_name}" )
21
- conn.exec( "CREATE TABLE #{table_name} ( id SERIAL, name TEXT, body_weight REAL, brain_weight REAL )" )
22
-
23
- text = <<-END_DATA
24
- Mountain beaver 1.35 465
25
- Cow 465 423
26
- Grey wolf 36.33 119.5
27
- Goat 27.66 115
28
- Guinea pig 1.04 5.5
29
- Dipliodocus 11700 50
30
- Asian elephant 2547 4603
31
- Donkey 187.1 419
32
- Horse 521 655
33
- Potar monkey 10 115
34
- Cat 3.3 25.6
35
- Giraffe 529 680
36
- Gorilla 207 406
37
- Human 62 1320
38
- African elephant 6654 5712
39
- Triceratops 9400 70
40
- Rhesus monkey 6.8 179
41
- Kangaroo 35 56
42
- Golden hamster 0.12 1
43
- Mouse 0.023 0.4
44
- Rabbit 2.5 12.1
45
- Sheep 55.5 175
46
- Jaguar 100 157
47
- Chimpanzee 52.16 440
48
- Brachiosaurus 87000 154.5
49
- Mole 0.122 3
50
- Pig 192 18
51
- END_DATA
52
-
53
- #ActiveRecord::Base.connection_pool.with_connection do |conn|
54
- conn.transaction do
55
- rc = conn #.raw_connection
56
- rc.exec "TRUNCATE TABLE #{table_name};" if options[:truncate]
57
- sql = "COPY #{table_name} (#{field_list.join(',')}) FROM STDIN #{sql_parameters} "
58
- p sql
59
- rc.exec(sql)
60
- errmsg = nil # scope this outside of the rescue below so it's visible later
61
- begin
62
- if method == 1
63
- rc.put_copy_data text + "\\.\n"
64
- else
65
- text.each_line { |line| rc.put_copy_data(line) }
66
- end
67
- rescue Errno => err
68
- errmsg = "%s while reading copy data: %s" % [err.class.name, err.message]
69
- puts "an error occured"
70
- end
71
-
72
- if errmsg
73
- rc.put_copy_end(errmsg)
74
- puts "ERROR #{errmsg}"
75
- else
76
- rc.put_copy_end
77
- end
78
-
79
- while res = rc.get_result
80
- st = res.res_status( res.result_status )
81
- puts "Result of COPY is: %s" % [ st ]
82
- if res.result_status != PG::PGRES_COPY_IN
83
- puts res.error_message
84
- end
85
- end
86
- puts "end"
87
- end #transaction
88
- #end #connection
89
-
90
- conn.exec( "SELECT name, brain_weight FROM #{table_name}" ) do |res|
91
- p res.values
92
- end
93
-
94
-