pg 0.18.2 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.appveyor.yml +42 -0
  4. data/.gems +6 -0
  5. data/.github/workflows/binary-gems.yml +117 -0
  6. data/.github/workflows/source-gem.yml +141 -0
  7. data/.gitignore +22 -0
  8. data/.hgsigs +34 -0
  9. data/.hgtags +41 -0
  10. data/.irbrc +23 -0
  11. data/.pryrc +23 -0
  12. data/.tm_properties +21 -0
  13. data/.travis.yml +49 -0
  14. data/BSDL +2 -2
  15. data/Gemfile +14 -0
  16. data/History.md +884 -0
  17. data/Manifest.txt +8 -21
  18. data/README-Windows.rdoc +17 -28
  19. data/README.ja.md +300 -0
  20. data/README.md +286 -0
  21. data/Rakefile +40 -131
  22. data/Rakefile.cross +88 -70
  23. data/certs/ged.pem +24 -0
  24. data/certs/larskanis-2022.pem +26 -0
  25. data/certs/larskanis-2023.pem +24 -0
  26. data/ext/errorcodes.def +113 -0
  27. data/ext/errorcodes.rb +1 -1
  28. data/ext/errorcodes.txt +36 -2
  29. data/ext/extconf.rb +124 -54
  30. data/ext/gvl_wrappers.c +8 -0
  31. data/ext/gvl_wrappers.h +44 -33
  32. data/ext/pg.c +227 -201
  33. data/ext/pg.h +99 -100
  34. data/ext/pg_binary_decoder.c +164 -16
  35. data/ext/pg_binary_encoder.c +249 -22
  36. data/ext/pg_coder.c +189 -44
  37. data/ext/pg_connection.c +1874 -1174
  38. data/ext/pg_copy_coder.c +398 -42
  39. data/ext/pg_errors.c +1 -1
  40. data/ext/pg_record_coder.c +522 -0
  41. data/ext/pg_result.c +727 -232
  42. data/ext/pg_text_decoder.c +629 -43
  43. data/ext/pg_text_encoder.c +269 -102
  44. data/ext/pg_tuple.c +572 -0
  45. data/ext/pg_type_map.c +64 -23
  46. data/ext/pg_type_map_all_strings.c +21 -7
  47. data/ext/pg_type_map_by_class.c +59 -27
  48. data/ext/pg_type_map_by_column.c +86 -43
  49. data/ext/pg_type_map_by_mri_type.c +49 -20
  50. data/ext/pg_type_map_by_oid.c +62 -29
  51. data/ext/pg_type_map_in_ruby.c +56 -22
  52. data/ext/{util.c → pg_util.c} +12 -12
  53. data/ext/{util.h → pg_util.h} +2 -2
  54. data/lib/pg/basic_type_map_based_on_result.rb +67 -0
  55. data/lib/pg/basic_type_map_for_queries.rb +198 -0
  56. data/lib/pg/basic_type_map_for_results.rb +104 -0
  57. data/lib/pg/basic_type_registry.rb +299 -0
  58. data/lib/pg/binary_decoder/date.rb +9 -0
  59. data/lib/pg/binary_decoder/timestamp.rb +26 -0
  60. data/lib/pg/binary_encoder/timestamp.rb +20 -0
  61. data/lib/pg/coder.rb +36 -13
  62. data/lib/pg/connection.rb +797 -77
  63. data/lib/pg/exceptions.rb +16 -2
  64. data/lib/pg/result.rb +24 -7
  65. data/lib/pg/text_decoder/date.rb +18 -0
  66. data/lib/pg/text_decoder/inet.rb +9 -0
  67. data/lib/pg/text_decoder/json.rb +14 -0
  68. data/lib/pg/text_decoder/numeric.rb +9 -0
  69. data/lib/pg/text_decoder/timestamp.rb +30 -0
  70. data/lib/pg/text_encoder/date.rb +12 -0
  71. data/lib/pg/text_encoder/inet.rb +28 -0
  72. data/lib/pg/text_encoder/json.rb +14 -0
  73. data/lib/pg/text_encoder/numeric.rb +9 -0
  74. data/lib/pg/text_encoder/timestamp.rb +24 -0
  75. data/lib/pg/tuple.rb +30 -0
  76. data/lib/pg/type_map_by_column.rb +3 -2
  77. data/lib/pg/version.rb +4 -0
  78. data/lib/pg.rb +106 -41
  79. data/misc/openssl-pg-segfault.rb +31 -0
  80. data/misc/postgres/History.txt +9 -0
  81. data/misc/postgres/Manifest.txt +5 -0
  82. data/misc/postgres/README.txt +21 -0
  83. data/misc/postgres/Rakefile +21 -0
  84. data/misc/postgres/lib/postgres.rb +16 -0
  85. data/misc/ruby-pg/History.txt +9 -0
  86. data/misc/ruby-pg/Manifest.txt +5 -0
  87. data/misc/ruby-pg/README.txt +21 -0
  88. data/misc/ruby-pg/Rakefile +21 -0
  89. data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
  90. data/pg.gemspec +34 -0
  91. data/rakelib/task_extension.rb +46 -0
  92. data/sample/array_insert.rb +1 -1
  93. data/sample/async_api.rb +4 -8
  94. data/sample/async_copyto.rb +1 -1
  95. data/sample/async_mixed.rb +1 -1
  96. data/sample/check_conn.rb +1 -1
  97. data/sample/copydata.rb +71 -0
  98. data/sample/copyfrom.rb +1 -1
  99. data/sample/copyto.rb +1 -1
  100. data/sample/cursor.rb +1 -1
  101. data/sample/disk_usage_report.rb +6 -15
  102. data/sample/issue-119.rb +2 -2
  103. data/sample/losample.rb +1 -1
  104. data/sample/minimal-testcase.rb +2 -2
  105. data/sample/notify_wait.rb +1 -1
  106. data/sample/pg_statistics.rb +6 -15
  107. data/sample/replication_monitor.rb +9 -18
  108. data/sample/test_binary_values.rb +1 -1
  109. data/sample/wal_shipper.rb +2 -2
  110. data/sample/warehouse_partitions.rb +8 -17
  111. data/translation/.po4a-version +7 -0
  112. data/translation/po/all.pot +936 -0
  113. data/translation/po/ja.po +1036 -0
  114. data/translation/po4a.cfg +12 -0
  115. data.tar.gz.sig +0 -0
  116. metadata +130 -201
  117. metadata.gz.sig +0 -0
  118. data/ChangeLog +0 -5545
  119. data/History.rdoc +0 -313
  120. data/README.ja.rdoc +0 -14
  121. data/README.rdoc +0 -161
  122. data/lib/pg/basic_type_mapping.rb +0 -399
  123. data/lib/pg/constants.rb +0 -11
  124. data/lib/pg/text_decoder.rb +0 -42
  125. data/lib/pg/text_encoder.rb +0 -27
  126. data/spec/data/expected_trace.out +0 -26
  127. data/spec/data/random_binary_data +0 -0
  128. data/spec/helpers.rb +0 -355
  129. data/spec/pg/basic_type_mapping_spec.rb +0 -251
  130. data/spec/pg/connection_spec.rb +0 -1535
  131. data/spec/pg/result_spec.rb +0 -449
  132. data/spec/pg/type_map_by_class_spec.rb +0 -138
  133. data/spec/pg/type_map_by_column_spec.rb +0 -222
  134. data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
  135. data/spec/pg/type_map_by_oid_spec.rb +0 -149
  136. data/spec/pg/type_map_in_ruby_spec.rb +0 -164
  137. data/spec/pg/type_map_spec.rb +0 -22
  138. data/spec/pg/type_spec.rb +0 -688
  139. data/spec/pg_spec.rb +0 -50
@@ -0,0 +1,936 @@
1
+ # SOME DESCRIPTIVE TITLE
2
+ # Copyright (C) YEAR Pg authors
3
+ # This file is distributed under the same license as the Pg package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: Pg 1.4.6\n"
10
+ "POT-Creation-Date: 2023-05-26 21:44+0900\n"
11
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "Language: en\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #. type: Title #
20
+ #: ../README.md:1
21
+ #, markdown-text, no-wrap
22
+ msgid "pg"
23
+ msgstr ""
24
+
25
+ #. type: Bullet: '* '
26
+ #: ../README.md:7
27
+ #, markdown-text
28
+ msgid "home :: https://github.com/ged/ruby-pg"
29
+ msgstr ""
30
+
31
+ #. type: Plain text
32
+ #: ../README.md:7
33
+ #, markdown-text, no-wrap
34
+ msgid ""
35
+ "* docs :: http://deveiate.org/code/pg (English) ,\n"
36
+ " https://deveiate.org/code/pg/README_ja_md.html (Japanese)\n"
37
+ "* clog :: link:/History.md\n"
38
+ msgstr ""
39
+
40
+ #. type: Plain text
41
+ #: ../README.md:9
42
+ #, markdown-text
43
+ msgid ""
44
+ "[![Join the chat at "
45
+ "https://gitter.im/ged/ruby-pg](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ged/ruby-pg?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)"
46
+ msgstr ""
47
+
48
+ #. type: Title ##
49
+ #: ../README.md:11
50
+ #, markdown-text, no-wrap
51
+ msgid "Description"
52
+ msgstr ""
53
+
54
+ #. type: Plain text
55
+ #: ../README.md:15
56
+ #, markdown-text
57
+ msgid ""
58
+ "Pg is the Ruby interface to the [PostgreSQL "
59
+ "RDBMS](http://www.postgresql.org/). It works with [PostgreSQL 9.3 and "
60
+ "later](http://www.postgresql.org/support/versioning/)."
61
+ msgstr ""
62
+
63
+ #. type: Plain text
64
+ #: ../README.md:17
65
+ #, markdown-text
66
+ msgid "A small example usage:"
67
+ msgstr ""
68
+
69
+ #. type: Fenced code block (ruby)
70
+ #: ../README.md:17
71
+ #, no-wrap
72
+ msgid ""
73
+ " #!/usr/bin/env ruby\n"
74
+ "\n"
75
+ " require 'pg'\n"
76
+ "\n"
77
+ " # Output a table of current connections to the DB\n"
78
+ " conn = PG.connect( dbname: 'sales' )\n"
79
+ " conn.exec( \"SELECT * FROM pg_stat_activity\" ) do |result|\n"
80
+ " puts \" PID | User | Query\"\n"
81
+ " result.each do |row|\n"
82
+ " puts \" %7d | %-16s | %s \" %\n"
83
+ " row.values_at('pid', 'usename', 'query')\n"
84
+ " end\n"
85
+ " end\n"
86
+ msgstr ""
87
+
88
+ #. type: Title ##
89
+ #: ../README.md:33
90
+ #, markdown-text, no-wrap
91
+ msgid "Build Status"
92
+ msgstr ""
93
+
94
+ #. type: Plain text
95
+ #: ../README.md:38
96
+ #, markdown-text
97
+ msgid ""
98
+ "[![Build Status Github "
99
+ "Actions](https://github.com/ged/ruby-pg/actions/workflows/source-gem.yml/badge.svg?branch=master)](https://github.com/ged/ruby-pg/actions/workflows/source-gem.yml) "
100
+ "[![Binary "
101
+ "gems](https://github.com/ged/ruby-pg/actions/workflows/binary-gems.yml/badge.svg?branch=master)](https://github.com/ged/ruby-pg/actions/workflows/binary-gems.yml) "
102
+ "[![Build Status "
103
+ "Appveyor](https://ci.appveyor.com/api/projects/status/gjx5axouf3b1wicp?svg=true)](https://ci.appveyor.com/project/ged/ruby-pg-9j8l3)"
104
+ msgstr ""
105
+
106
+ #. type: Title ##
107
+ #: ../README.md:40
108
+ #, markdown-text, no-wrap
109
+ msgid "Requirements"
110
+ msgstr ""
111
+
112
+ #. type: Bullet: '* '
113
+ #: ../README.md:44
114
+ #, markdown-text
115
+ msgid "Ruby 2.5 or newer"
116
+ msgstr ""
117
+
118
+ #. type: Bullet: '* '
119
+ #: ../README.md:44
120
+ #, markdown-text
121
+ msgid "PostgreSQL 9.3.x or later (with headers, -dev packages, etc)."
122
+ msgstr ""
123
+
124
+ #. type: Plain text
125
+ #: ../README.md:47
126
+ #, markdown-text
127
+ msgid ""
128
+ "It usually works with earlier versions of Ruby/PostgreSQL as well, but those "
129
+ "are not regularly tested."
130
+ msgstr ""
131
+
132
+ #. type: Title ##
133
+ #: ../README.md:49
134
+ #, markdown-text, no-wrap
135
+ msgid "Versioning"
136
+ msgstr ""
137
+
138
+ #. type: Plain text
139
+ #: ../README.md:52
140
+ #, markdown-text
141
+ msgid ""
142
+ "We tag and release gems according to the [Semantic "
143
+ "Versioning](http://semver.org/) principle."
144
+ msgstr ""
145
+
146
+ #. type: Plain text
147
+ #: ../README.md:54
148
+ #, markdown-text
149
+ msgid ""
150
+ "As a result of this policy, you can (and should) specify a dependency on "
151
+ "this gem using the [Pessimistic Version "
152
+ "Constraint](http://guides.rubygems.org/patterns/#pessimistic-version-constraint) "
153
+ "with two digits of precision."
154
+ msgstr ""
155
+
156
+ #. type: Plain text
157
+ #: ../README.md:56
158
+ #, markdown-text
159
+ msgid "For example:"
160
+ msgstr ""
161
+
162
+ #. type: Fenced code block (ruby)
163
+ #: ../README.md:57
164
+ #, no-wrap
165
+ msgid " spec.add_dependency 'pg', '~> 1.0'\n"
166
+ msgstr ""
167
+
168
+ #. type: Title ##
169
+ #: ../README.md:61
170
+ #, markdown-text, no-wrap
171
+ msgid "How To Install"
172
+ msgstr ""
173
+
174
+ #. type: Plain text
175
+ #: ../README.md:64
176
+ #, markdown-text
177
+ msgid "Install via RubyGems:"
178
+ msgstr ""
179
+
180
+ #. type: Plain text
181
+ #: ../README.md:66
182
+ #, markdown-text, no-wrap
183
+ msgid " gem install pg\n"
184
+ msgstr ""
185
+
186
+ #. type: Plain text
187
+ #: ../README.md:69
188
+ #, markdown-text
189
+ msgid ""
190
+ "You may need to specify the path to the 'pg_config' program installed with "
191
+ "Postgres:"
192
+ msgstr ""
193
+
194
+ #. type: Plain text
195
+ #: ../README.md:71
196
+ #, markdown-text, no-wrap
197
+ msgid " gem install pg -- --with-pg-config=<path to pg_config>\n"
198
+ msgstr ""
199
+
200
+ #. type: Plain text
201
+ #: ../README.md:73
202
+ #, markdown-text
203
+ msgid "If you're installing via Bundler, you can provide compile hints like so:"
204
+ msgstr ""
205
+
206
+ #. type: Plain text
207
+ #: ../README.md:75
208
+ #, markdown-text, no-wrap
209
+ msgid " bundle config build.pg --with-pg-config=<path to pg_config>\n"
210
+ msgstr ""
211
+
212
+ #. type: Plain text
213
+ #: ../README.md:78
214
+ #, markdown-text
215
+ msgid ""
216
+ "See README-OS_X.rdoc for more information about installing under MacOS X, "
217
+ "and README-Windows.rdoc for Windows build/installation instructions."
218
+ msgstr ""
219
+
220
+ #. type: Plain text
221
+ #: ../README.md:82
222
+ #, markdown-text
223
+ msgid ""
224
+ "There's also [a Google+ group](http://goo.gl/TFy1U) and a [mailing "
225
+ "list](http://groups.google.com/group/ruby-pg) if you get stuck, or just want "
226
+ "to chat about something."
227
+ msgstr ""
228
+
229
+ #. type: Plain text
230
+ #: ../README.md:86
231
+ #, markdown-text
232
+ msgid ""
233
+ "If you want to install as a signed gem, the public certs of the gem signers "
234
+ "can be found in [the `certs` "
235
+ "directory](https://github.com/ged/ruby-pg/tree/master/certs) of the "
236
+ "repository."
237
+ msgstr ""
238
+
239
+ #. type: Title ##
240
+ #: ../README.md:88
241
+ #, markdown-text, no-wrap
242
+ msgid "Type Casts"
243
+ msgstr ""
244
+
245
+ #. type: Plain text
246
+ #: ../README.md:94
247
+ #, markdown-text
248
+ msgid ""
249
+ "Pg can optionally type cast result values and query parameters in Ruby or "
250
+ "native C code. This can speed up data transfers to and from the database, "
251
+ "because String allocations are reduced and conversions in (slower) Ruby code "
252
+ "can be omitted."
253
+ msgstr ""
254
+
255
+ #. type: Plain text
256
+ #: ../README.md:96
257
+ #, markdown-text
258
+ msgid "Very basic type casting can be enabled by:"
259
+ msgstr ""
260
+
261
+ #. type: Fenced code block (ruby)
262
+ #: ../README.md:96
263
+ #, no-wrap
264
+ msgid ""
265
+ " conn.type_map_for_results = PG::BasicTypeMapForResults.new conn\n"
266
+ " # ... this works for result value mapping:\n"
267
+ " conn.exec(\"select 1, now(), '{2,3}'::int[]\").values\n"
268
+ " # => [[1, 2014-09-21 20:51:56 +0200, [2, 3]]]\n"
269
+ "\n"
270
+ " conn.type_map_for_queries = PG::BasicTypeMapForQueries.new conn\n"
271
+ " # ... and this for param value mapping:\n"
272
+ " conn.exec_params(\"SELECT $1::text, $2::text, $3::text\", [1, 1.23, "
273
+ "[2,3]]).values\n"
274
+ " # => [[\"1\", \"1.2300000000000000E+00\", \"{2,3}\"]]\n"
275
+ msgstr ""
276
+
277
+ #. type: Plain text
278
+ #: ../README.md:110
279
+ #, markdown-text
280
+ msgid ""
281
+ "But Pg's type casting is highly customizable. That's why it's divided into 2 "
282
+ "layers:"
283
+ msgstr ""
284
+
285
+ #. type: Title ###
286
+ #: ../README.md:111
287
+ #, markdown-text, no-wrap
288
+ msgid "Encoders / Decoders (ext/pg_*coder.c, lib/pg/*coder.rb)"
289
+ msgstr ""
290
+
291
+ #. type: Plain text
292
+ #: ../README.md:118
293
+ #, markdown-text
294
+ msgid ""
295
+ "This is the lower layer, containing encoding classes that convert Ruby "
296
+ "objects for transmission to the DBMS and decoding classes to convert "
297
+ "received data back to Ruby objects. The classes are namespaced according to "
298
+ "their format and direction in PG::TextEncoder, PG::TextDecoder, "
299
+ "PG::BinaryEncoder and PG::BinaryDecoder."
300
+ msgstr ""
301
+
302
+ #. type: Plain text
303
+ #: ../README.md:124
304
+ #, markdown-text
305
+ msgid ""
306
+ "It is possible to assign a type OID, format code (text or binary) and "
307
+ "optionally a name to an encoder or decoder object. It's also possible to "
308
+ "build composite types by assigning an element encoder/decoder. PG::Coder "
309
+ "objects can be used to set up a PG::TypeMap or alternatively to convert "
310
+ "single values to/from their string representation."
311
+ msgstr ""
312
+
313
+ #. type: Plain text
314
+ #: ../README.md:126
315
+ #, markdown-text
316
+ msgid ""
317
+ "The following PostgreSQL column types are supported by ruby-pg (TE = Text "
318
+ "Encoder, TD = Text Decoder, BE = Binary Encoder, BD = Binary Decoder):"
319
+ msgstr ""
320
+
321
+ #. type: Bullet: '* '
322
+ #: ../README.md:146
323
+ #, markdown-text
324
+ msgid ""
325
+ "Integer: [TE](rdoc-ref:PG::TextEncoder::Integer), "
326
+ "[TD](rdoc-ref:PG::TextDecoder::Integer), "
327
+ "[BD](rdoc-ref:PG::BinaryDecoder::Integer) 💡 No links? Switch to "
328
+ "[here](https://deveiate.org/code/pg/README_md.html#label-Type+Casts) 💡"
329
+ msgstr ""
330
+
331
+ #. type: Bullet: ' * '
332
+ #: ../README.md:146
333
+ #, markdown-text
334
+ msgid ""
335
+ "BE: [Int2](rdoc-ref:PG::BinaryEncoder::Int2), "
336
+ "[Int4](rdoc-ref:PG::BinaryEncoder::Int4), "
337
+ "[Int8](rdoc-ref:PG::BinaryEncoder::Int8)"
338
+ msgstr ""
339
+
340
+ #. type: Bullet: '* '
341
+ #: ../README.md:146
342
+ #, markdown-text
343
+ msgid ""
344
+ "Float: [TE](rdoc-ref:PG::TextEncoder::Float), "
345
+ "[TD](rdoc-ref:PG::TextDecoder::Float), "
346
+ "[BD](rdoc-ref:PG::BinaryDecoder::Float)"
347
+ msgstr ""
348
+
349
+ #. type: Bullet: ' * '
350
+ #: ../README.md:146
351
+ #, markdown-text
352
+ msgid ""
353
+ "BE: [Float4](rdoc-ref:PG::BinaryEncoder::Float4), "
354
+ "[Float8](rdoc-ref:PG::BinaryEncoder::Float8)"
355
+ msgstr ""
356
+
357
+ #. type: Bullet: '* '
358
+ #: ../README.md:146
359
+ #, markdown-text
360
+ msgid ""
361
+ "Numeric: [TE](rdoc-ref:PG::TextEncoder::Numeric), "
362
+ "[TD](rdoc-ref:PG::TextDecoder::Numeric)"
363
+ msgstr ""
364
+
365
+ #. type: Bullet: '* '
366
+ #: ../README.md:146
367
+ #, markdown-text
368
+ msgid ""
369
+ "Boolean: [TE](rdoc-ref:PG::TextEncoder::Boolean), "
370
+ "[TD](rdoc-ref:PG::TextDecoder::Boolean), "
371
+ "[BE](rdoc-ref:PG::BinaryEncoder::Boolean), "
372
+ "[BD](rdoc-ref:PG::BinaryDecoder::Boolean)"
373
+ msgstr ""
374
+
375
+ #. type: Bullet: '* '
376
+ #: ../README.md:146
377
+ #, markdown-text
378
+ msgid ""
379
+ "String: [TE](rdoc-ref:PG::TextEncoder::String), "
380
+ "[TD](rdoc-ref:PG::TextDecoder::String), "
381
+ "[BE](rdoc-ref:PG::BinaryEncoder::String), "
382
+ "[BD](rdoc-ref:PG::BinaryDecoder::String)"
383
+ msgstr ""
384
+
385
+ #. type: Bullet: '* '
386
+ #: ../README.md:146
387
+ #, markdown-text
388
+ msgid ""
389
+ "Bytea: [TE](rdoc-ref:PG::TextEncoder::Bytea), "
390
+ "[TD](rdoc-ref:PG::TextDecoder::Bytea), "
391
+ "[BE](rdoc-ref:PG::BinaryEncoder::Bytea), "
392
+ "[BD](rdoc-ref:PG::BinaryDecoder::Bytea)"
393
+ msgstr ""
394
+
395
+ #. type: Bullet: '* '
396
+ #: ../README.md:146
397
+ #, markdown-text
398
+ msgid ""
399
+ "Base64: [TE](rdoc-ref:PG::TextEncoder::ToBase64), "
400
+ "[TD](rdoc-ref:PG::TextDecoder::FromBase64), "
401
+ "[BE](rdoc-ref:PG::BinaryEncoder::FromBase64), "
402
+ "[BD](rdoc-ref:PG::BinaryDecoder::ToBase64)"
403
+ msgstr ""
404
+
405
+ #. type: Bullet: '* '
406
+ #: ../README.md:146
407
+ #, markdown-text
408
+ msgid "Timestamp:"
409
+ msgstr ""
410
+
411
+ #. type: Bullet: ' * '
412
+ #: ../README.md:146
413
+ #, markdown-text
414
+ msgid ""
415
+ "TE: [local](rdoc-ref:PG::TextEncoder::TimestampWithoutTimeZone), "
416
+ "[UTC](rdoc-ref:PG::TextEncoder::TimestampUtc), "
417
+ "[with-TZ](rdoc-ref:PG::TextEncoder::TimestampWithTimeZone)"
418
+ msgstr ""
419
+
420
+ #. type: Bullet: ' * '
421
+ #: ../README.md:146
422
+ #, markdown-text
423
+ msgid ""
424
+ "TD: [local](rdoc-ref:PG::TextDecoder::TimestampLocal), "
425
+ "[UTC](rdoc-ref:PG::TextDecoder::TimestampUtc), "
426
+ "[UTC-to-local](rdoc-ref:PG::TextDecoder::TimestampUtcToLocal)"
427
+ msgstr ""
428
+
429
+ #. type: Bullet: ' * '
430
+ #: ../README.md:146
431
+ #, markdown-text
432
+ msgid ""
433
+ "BE: [local](rdoc-ref:PG::BinaryEncoder::TimestampLocal), "
434
+ "[UTC](rdoc-ref:PG::BinaryEncoder::TimestampUtc)"
435
+ msgstr ""
436
+
437
+ #. type: Bullet: ' * '
438
+ #: ../README.md:146
439
+ #, markdown-text
440
+ msgid ""
441
+ "BD: [local](rdoc-ref:PG::BinaryDecoder::TimestampLocal), "
442
+ "[UTC](rdoc-ref:PG::BinaryDecoder::TimestampUtc), "
443
+ "[UTC-to-local](rdoc-ref:PG::BinaryDecoder::TimestampUtcToLocal)"
444
+ msgstr ""
445
+
446
+ #. type: Bullet: '* '
447
+ #: ../README.md:146
448
+ #, markdown-text
449
+ msgid ""
450
+ "Date: [TE](rdoc-ref:PG::TextEncoder::Date), "
451
+ "[TD](rdoc-ref:PG::TextDecoder::Date), "
452
+ "[BE](rdoc-ref:PG::BinaryEncoder::Date), "
453
+ "[BD](rdoc-ref:PG::BinaryDecoder::Date)"
454
+ msgstr ""
455
+
456
+ #. type: Bullet: '* '
457
+ #: ../README.md:146
458
+ #, markdown-text
459
+ msgid ""
460
+ "JSON and JSONB: [TE](rdoc-ref:PG::TextEncoder::JSON), "
461
+ "[TD](rdoc-ref:PG::TextDecoder::JSON)"
462
+ msgstr ""
463
+
464
+ #. type: Bullet: '* '
465
+ #: ../README.md:146
466
+ #, markdown-text
467
+ msgid ""
468
+ "Inet: [TE](rdoc-ref:PG::TextEncoder::Inet), "
469
+ "[TD](rdoc-ref:PG::TextDecoder::Inet)"
470
+ msgstr ""
471
+
472
+ #. type: Bullet: '* '
473
+ #: ../README.md:146
474
+ #, markdown-text
475
+ msgid ""
476
+ "Array: [TE](rdoc-ref:PG::TextEncoder::Array), "
477
+ "[TD](rdoc-ref:PG::TextDecoder::Array)"
478
+ msgstr ""
479
+
480
+ #. type: Bullet: '* '
481
+ #: ../README.md:146
482
+ #, markdown-text
483
+ msgid ""
484
+ "Composite Type (also called \"Row\" or \"Record\"): "
485
+ "[TE](rdoc-ref:PG::TextEncoder::Record), "
486
+ "[TD](rdoc-ref:PG::TextDecoder::Record)"
487
+ msgstr ""
488
+
489
+ #. type: Plain text
490
+ #: ../README.md:148
491
+ #, markdown-text
492
+ msgid ""
493
+ "The following text and binary formats can also be encoded although they are "
494
+ "not used as column type:"
495
+ msgstr ""
496
+
497
+ #. type: Bullet: '* '
498
+ #: ../README.md:152
499
+ #, markdown-text
500
+ msgid ""
501
+ "COPY input and output data: [TE](rdoc-ref:PG::TextEncoder::CopyRow), "
502
+ "[TD](rdoc-ref:PG::TextDecoder::CopyRow), "
503
+ "[BE](rdoc-ref:PG::BinaryEncoder::CopyRow), "
504
+ "[BD](rdoc-ref:PG::BinaryDecoder::CopyRow)"
505
+ msgstr ""
506
+
507
+ #. type: Bullet: '* '
508
+ #: ../README.md:152
509
+ #, markdown-text
510
+ msgid ""
511
+ "Literal for insertion into SQL string: "
512
+ "[TE](rdoc-ref:PG::TextEncoder::QuotedLiteral)"
513
+ msgstr ""
514
+
515
+ #. type: Bullet: '* '
516
+ #: ../README.md:152
517
+ #, markdown-text
518
+ msgid ""
519
+ "SQL-Identifier: [TE](rdoc-ref:PG::TextEncoder::Identifier), "
520
+ "[TD](rdoc-ref:PG::TextDecoder::Identifier)"
521
+ msgstr ""
522
+
523
+ #. type: Title ###
524
+ #: ../README.md:153
525
+ #, markdown-text, no-wrap
526
+ msgid "PG::TypeMap and derivations (ext/pg_type_map*.c, lib/pg/type_map*.rb)"
527
+ msgstr ""
528
+
529
+ #. type: Plain text
530
+ #: ../README.md:159
531
+ #, markdown-text
532
+ msgid ""
533
+ "A TypeMap defines which value will be converted by which encoder/decoder. "
534
+ "There are different type map strategies, implemented by several derivations "
535
+ "of this class. They can be chosen and configured according to the particular "
536
+ "needs for type casting. The default type map is PG::TypeMapAllStrings."
537
+ msgstr ""
538
+
539
+ #. type: Plain text
540
+ #: ../README.md:163
541
+ #, markdown-text
542
+ msgid ""
543
+ "A type map can be assigned per connection or per query respectively per "
544
+ "result set. Type maps can also be used for COPY in and out data streaming. "
545
+ "See PG::Connection#copy_data ."
546
+ msgstr ""
547
+
548
+ #. type: Plain text
549
+ #: ../README.md:165
550
+ #, markdown-text
551
+ msgid "The following base type maps are available:"
552
+ msgstr ""
553
+
554
+ #. type: Bullet: '* '
555
+ #: ../README.md:171
556
+ #, markdown-text
557
+ msgid ""
558
+ "PG::TypeMapAllStrings - encodes and decodes all values to and from strings "
559
+ "(default)"
560
+ msgstr ""
561
+
562
+ #. type: Bullet: '* '
563
+ #: ../README.md:171
564
+ #, markdown-text
565
+ msgid ""
566
+ "PG::TypeMapByClass - selects encoder based on the class of the value to be "
567
+ "sent"
568
+ msgstr ""
569
+
570
+ #. type: Bullet: '* '
571
+ #: ../README.md:171
572
+ #, markdown-text
573
+ msgid "PG::TypeMapByColumn - selects encoder and decoder by column order"
574
+ msgstr ""
575
+
576
+ #. type: Bullet: '* '
577
+ #: ../README.md:171
578
+ #, markdown-text
579
+ msgid "PG::TypeMapByOid - selects decoder by PostgreSQL type OID"
580
+ msgstr ""
581
+
582
+ #. type: Bullet: '* '
583
+ #: ../README.md:171
584
+ #, markdown-text
585
+ msgid "PG::TypeMapInRuby - define a custom type map in ruby"
586
+ msgstr ""
587
+
588
+ #. type: Plain text
589
+ #: ../README.md:173
590
+ #, markdown-text
591
+ msgid ""
592
+ "The following type maps are prefilled with type mappings from the "
593
+ "PG::BasicTypeRegistry :"
594
+ msgstr ""
595
+
596
+ #. type: Bullet: '* '
597
+ #: ../README.md:177
598
+ #, markdown-text
599
+ msgid ""
600
+ "PG::BasicTypeMapForResults - a PG::TypeMapByOid prefilled with decoders for "
601
+ "common PostgreSQL column types"
602
+ msgstr ""
603
+
604
+ #. type: Bullet: '* '
605
+ #: ../README.md:177
606
+ #, markdown-text
607
+ msgid ""
608
+ "PG::BasicTypeMapBasedOnResult - a PG::TypeMapByOid prefilled with encoders "
609
+ "for common PostgreSQL column types"
610
+ msgstr ""
611
+
612
+ #. type: Bullet: '* '
613
+ #: ../README.md:177
614
+ #, markdown-text
615
+ msgid ""
616
+ "PG::BasicTypeMapForQueries - a PG::TypeMapByClass prefilled with encoders "
617
+ "for common Ruby value classes"
618
+ msgstr ""
619
+
620
+ #. type: Title ##
621
+ #: ../README.md:179
622
+ #, markdown-text, no-wrap
623
+ msgid "Thread support"
624
+ msgstr ""
625
+
626
+ #. type: Plain text
627
+ #: ../README.md:184
628
+ #, markdown-text
629
+ msgid ""
630
+ "PG is thread safe in such a way that different threads can use different "
631
+ "PG::Connection objects concurrently. However it is not safe to access any "
632
+ "Pg objects simultaneously from more than one thread. So make sure to open a "
633
+ "new database server connection for every new thread or use a wrapper library "
634
+ "like ActiveRecord that manages connections in a thread safe way."
635
+ msgstr ""
636
+
637
+ #. type: Plain text
638
+ #: ../README.md:186
639
+ #, markdown-text
640
+ msgid ""
641
+ "If messages like the following are printed to stderr, you're probably using "
642
+ "one connection from several threads:"
643
+ msgstr ""
644
+
645
+ #. type: Plain text
646
+ #: ../README.md:192
647
+ #, markdown-text, no-wrap
648
+ msgid ""
649
+ " message type 0x31 arrived from server while idle\n"
650
+ " message type 0x32 arrived from server while idle\n"
651
+ " message type 0x54 arrived from server while idle\n"
652
+ " message type 0x43 arrived from server while idle\n"
653
+ " message type 0x5a arrived from server while idle\n"
654
+ msgstr ""
655
+
656
+ #. type: Title ##
657
+ #: ../README.md:194
658
+ #, markdown-text, no-wrap
659
+ msgid "Fiber IO scheduler support"
660
+ msgstr ""
661
+
662
+ #. type: Plain text
663
+ #: ../README.md:201
664
+ #, markdown-text
665
+ msgid ""
666
+ "Pg is fully compatible with `Fiber.scheduler` introduced in Ruby-3.0 since "
667
+ "pg-1.3.0. On Windows support for `Fiber.scheduler` is available on Ruby-3.1 "
668
+ "or newer. All possibly blocking IO operations are routed through the "
669
+ "`Fiber.scheduler` if one is registered for the running thread. That is why "
670
+ "pg internally uses the asynchronous libpq interface even for "
671
+ "synchronous/blocking method calls. It also uses Ruby's DNS resolution "
672
+ "instead of libpq's builtin functions."
673
+ msgstr ""
674
+
675
+ #. type: Plain text
676
+ #: ../README.md:205
677
+ #, markdown-text
678
+ msgid ""
679
+ "Internally Pg always uses the nonblocking connection mode of libpq. It then "
680
+ "behaves like running in blocking mode but ensures, that all blocking IO is "
681
+ "handled in Ruby through a possibly registered `Fiber.scheduler`. When "
682
+ "`PG::Connection.setnonblocking(true)` is called then the nonblocking state "
683
+ "stays enabled, but the additional handling of blocking states is disabled, "
684
+ "so that the calling program has to handle blocking states on its own."
685
+ msgstr ""
686
+
687
+ #. type: Plain text
688
+ #: ../README.md:209
689
+ #, markdown-text
690
+ msgid ""
691
+ "An exception to this rule are the methods for large objects like "
692
+ "`PG::Connection#lo_create` and authentication methods using external "
693
+ "libraries (like GSSAPI authentication). They are not compatible with "
694
+ "`Fiber.scheduler`, so that blocking states are not passed to the registered "
695
+ "IO scheduler. That means the operation will work properly, but IO waiting "
696
+ "states can not be used to switch to another Fiber doing IO."
697
+ msgstr ""
698
+
699
+ #. type: Title ##
700
+ #: ../README.md:211
701
+ #, markdown-text, no-wrap
702
+ msgid "Ractor support"
703
+ msgstr ""
704
+
705
+ #. type: Plain text
706
+ #: ../README.md:217
707
+ #, markdown-text
708
+ msgid ""
709
+ "Pg is fully compatible with Ractor introduced in Ruby-3.0 since pg-1.5.0. "
710
+ "All type en/decoders and type maps are shareable between ractors if they are "
711
+ "made frozen by `Ractor.make_shareable`. Also frozen PG::Result and "
712
+ "PG::Tuple objects can be shared. All frozen objects (except PG::Connection) "
713
+ "can still be used to do communication with the PostgreSQL server or to read "
714
+ "retrieved data."
715
+ msgstr ""
716
+
717
+ #. type: Plain text
718
+ #: ../README.md:219
719
+ #, markdown-text
720
+ msgid ""
721
+ "PG::Connection is not shareable and must be created within each Ractor to "
722
+ "establish a dedicated connection."
723
+ msgstr ""
724
+
725
+ #. type: Title ##
726
+ #: ../README.md:221
727
+ #, markdown-text, no-wrap
728
+ msgid "Contributing"
729
+ msgstr ""
730
+
731
+ #. type: Plain text
732
+ #: ../README.md:225
733
+ #, markdown-text
734
+ msgid ""
735
+ "To report bugs, suggest features, or check out the source with Git, [check "
736
+ "out the project page](https://github.com/ged/ruby-pg)."
737
+ msgstr ""
738
+
739
+ #. type: Plain text
740
+ #: ../README.md:227
741
+ #, markdown-text
742
+ msgid "After checking out the source, install all dependencies:"
743
+ msgstr ""
744
+
745
+ #. type: Plain text
746
+ #: ../README.md:229
747
+ #, markdown-text, no-wrap
748
+ msgid " $ bundle install\n"
749
+ msgstr ""
750
+
751
+ #. type: Plain text
752
+ #: ../README.md:232
753
+ #, markdown-text
754
+ msgid ""
755
+ "Cleanup extension files, packaging files, test databases. Run this to "
756
+ "change between PostgreSQL versions:"
757
+ msgstr ""
758
+
759
+ #. type: Plain text
760
+ #: ../README.md:234
761
+ #, markdown-text, no-wrap
762
+ msgid " $ rake clean\n"
763
+ msgstr ""
764
+
765
+ #. type: Plain text
766
+ #: ../README.md:236
767
+ #, markdown-text
768
+ msgid "Compile extension:"
769
+ msgstr ""
770
+
771
+ #. type: Plain text
772
+ #: ../README.md:238
773
+ #, markdown-text, no-wrap
774
+ msgid " $ rake compile\n"
775
+ msgstr ""
776
+
777
+ #. type: Plain text
778
+ #: ../README.md:240
779
+ #, markdown-text
780
+ msgid ""
781
+ "Run tests/specs on the PostgreSQL version that `pg_config --bindir` points "
782
+ "to:"
783
+ msgstr ""
784
+
785
+ #. type: Plain text
786
+ #: ../README.md:242
787
+ #, markdown-text, no-wrap
788
+ msgid " $ rake test\n"
789
+ msgstr ""
790
+
791
+ #. type: Plain text
792
+ #: ../README.md:244
793
+ #, markdown-text
794
+ msgid ""
795
+ "Or run a specific test per file and line number on a specific PostgreSQL "
796
+ "version:"
797
+ msgstr ""
798
+
799
+ #. type: Plain text
800
+ #: ../README.md:246
801
+ #, markdown-text, no-wrap
802
+ msgid ""
803
+ " $ PATH=/usr/lib/postgresql/14/bin:$PATH rspec -Ilib -fd "
804
+ "spec/pg/connection_spec.rb:455\n"
805
+ msgstr ""
806
+
807
+ #. type: Plain text
808
+ #: ../README.md:248
809
+ #, markdown-text
810
+ msgid "Generate the API documentation:"
811
+ msgstr ""
812
+
813
+ #. type: Plain text
814
+ #: ../README.md:250
815
+ #, markdown-text, no-wrap
816
+ msgid " $ rake docs\n"
817
+ msgstr ""
818
+
819
+ #. type: Plain text
820
+ #: ../README.md:252
821
+ #, markdown-text
822
+ msgid "Make sure, that all bugs and new features are verified by tests."
823
+ msgstr ""
824
+
825
+ #. type: Plain text
826
+ #: ../README.md:255
827
+ #, markdown-text
828
+ msgid ""
829
+ "The current maintainers are Michael Granger <ged@FaerieMUD.org> and Lars "
830
+ "Kanis <lars@greiz-reinsdorf.de>."
831
+ msgstr ""
832
+
833
+ #. type: Title ##
834
+ #: ../README.md:257
835
+ #, markdown-text, no-wrap
836
+ msgid "Copying"
837
+ msgstr ""
838
+
839
+ #. type: Plain text
840
+ #: ../README.md:260
841
+ #, markdown-text
842
+ msgid "Copyright (c) 1997-2022 by the authors."
843
+ msgstr ""
844
+
845
+ #. type: Bullet: '* '
846
+ #: ../README.md:269
847
+ #, markdown-text
848
+ msgid "Jeff Davis <ruby-pg@j-davis.com>"
849
+ msgstr ""
850
+
851
+ #. type: Bullet: '* '
852
+ #: ../README.md:269
853
+ #, markdown-text
854
+ msgid "Guy Decoux (ts) <decoux@moulon.inra.fr>"
855
+ msgstr ""
856
+
857
+ #. type: Bullet: '* '
858
+ #: ../README.md:269
859
+ #, markdown-text
860
+ msgid "Michael Granger <ged@FaerieMUD.org>"
861
+ msgstr ""
862
+
863
+ #. type: Bullet: '* '
864
+ #: ../README.md:269
865
+ #, markdown-text
866
+ msgid "Lars Kanis <lars@greiz-reinsdorf.de>"
867
+ msgstr ""
868
+
869
+ #. type: Bullet: '* '
870
+ #: ../README.md:269
871
+ #, markdown-text
872
+ msgid "Dave Lee"
873
+ msgstr ""
874
+
875
+ #. type: Bullet: '* '
876
+ #: ../README.md:269
877
+ #, markdown-text
878
+ msgid "Eiji Matsumoto <usagi@ruby.club.or.jp>"
879
+ msgstr ""
880
+
881
+ #. type: Bullet: '* '
882
+ #: ../README.md:269
883
+ #, markdown-text
884
+ msgid "Yukihiro Matsumoto <matz@ruby-lang.org>"
885
+ msgstr ""
886
+
887
+ #. type: Bullet: '* '
888
+ #: ../README.md:269
889
+ #, markdown-text
890
+ msgid "Noboru Saitou <noborus@netlab.jp>"
891
+ msgstr ""
892
+
893
+ #. type: Plain text
894
+ #: ../README.md:273
895
+ #, markdown-text
896
+ msgid ""
897
+ "You may redistribute this software under the same terms as Ruby itself; see "
898
+ "https://www.ruby-lang.org/en/about/license.txt or the BSDL file in the "
899
+ "source for details."
900
+ msgstr ""
901
+
902
+ #. type: Plain text
903
+ #: ../README.md:276
904
+ #, markdown-text
905
+ msgid ""
906
+ "Portions of the code are from the PostgreSQL project, and are distributed "
907
+ "under the terms of the PostgreSQL license, included in the file POSTGRES."
908
+ msgstr ""
909
+
910
+ #. type: Plain text
911
+ #: ../README.md:278
912
+ #, markdown-text
913
+ msgid "Portions copyright LAIKA, Inc."
914
+ msgstr ""
915
+
916
+ #. type: Title ##
917
+ #: ../README.md:280
918
+ #, markdown-text, no-wrap
919
+ msgid "Acknowledgments"
920
+ msgstr ""
921
+
922
+ #. type: Plain text
923
+ #: ../README.md:284
924
+ #, markdown-text
925
+ msgid ""
926
+ "See Contributors.rdoc for the many additional fine people that have "
927
+ "contributed to this library over the years."
928
+ msgstr ""
929
+
930
+ #. type: Plain text
931
+ #: ../README.md:286
932
+ #, markdown-text
933
+ msgid ""
934
+ "We are thankful to the people at the ruby-list and ruby-dev mailing lists. "
935
+ "And to the people who developed PostgreSQL."
936
+ msgstr ""