activerecord-import 2.2.0 → 2.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/README.markdown +9 -9
- data/lib/activerecord-import/active_record/adapters/mysql2_proxy_adapter.rb +8 -0
- data/lib/activerecord-import/active_record/adapters/postgresql_proxy_adapter.rb +8 -0
- data/lib/activerecord-import/active_record/adapters/sqlite3_proxy_adapter.rb +8 -0
- data/lib/activerecord-import/active_record/adapters/trilogy_proxy_adapter.rb +8 -0
- data/lib/activerecord-import/adapters/active_record_proxy_adapter.rb +19 -0
- data/lib/activerecord-import/adapters/mysql2_proxy_adapter.rb +9 -0
- data/lib/activerecord-import/adapters/mysql_adapter.rb +10 -3
- data/lib/activerecord-import/adapters/postgresql_adapter.rb +1 -1
- data/lib/activerecord-import/adapters/postgresql_proxy_adapter.rb +9 -0
- data/lib/activerecord-import/adapters/sqlite3_proxy_adapter.rb +9 -0
- data/lib/activerecord-import/adapters/trilogy_proxy_adapter.rb +9 -0
- data/lib/activerecord-import/base.rb +0 -2
- data/lib/activerecord-import/import.rb +243 -207
- data/lib/activerecord-import/version.rb +1 -1
- metadata +13 -208
- data/.github/workflows/test.yaml +0 -165
- data/.gitignore +0 -37
- data/.rubocop.yml +0 -118
- data/.rubocop_todo.yml +0 -30
- data/Brewfile +0 -5
- data/Dockerfile +0 -23
- data/Gemfile +0 -63
- data/Rakefile +0 -75
- data/activerecord-import.gemspec +0 -28
- data/benchmarks/README +0 -32
- data/benchmarks/benchmark.rb +0 -72
- data/benchmarks/lib/base.rb +0 -143
- data/benchmarks/lib/cli_parser.rb +0 -111
- data/benchmarks/lib/float.rb +0 -17
- data/benchmarks/lib/mysql2_benchmark.rb +0 -21
- data/benchmarks/lib/output_to_csv.rb +0 -21
- data/benchmarks/lib/output_to_html.rb +0 -66
- data/benchmarks/models/test_innodb.rb +0 -5
- data/benchmarks/models/test_memory.rb +0 -5
- data/benchmarks/models/test_myisam.rb +0 -5
- data/benchmarks/schema/mysql2_schema.rb +0 -18
- data/docker-compose.yml +0 -34
- data/gemfiles/5.2.gemfile +0 -4
- data/gemfiles/6.0.gemfile +0 -4
- data/gemfiles/6.1.gemfile +0 -4
- data/gemfiles/7.0.gemfile +0 -4
- data/gemfiles/7.1.gemfile +0 -3
- data/gemfiles/7.2.gemfile +0 -3
- data/gemfiles/8.0.gemfile +0 -3
- data/test/adapters/janus_mysql2.rb +0 -3
- data/test/adapters/janus_trilogy.rb +0 -11
- data/test/adapters/jdbcmysql.rb +0 -3
- data/test/adapters/jdbcpostgresql.rb +0 -3
- data/test/adapters/jdbcsqlite3.rb +0 -3
- data/test/adapters/makara_postgis.rb +0 -3
- data/test/adapters/mysql2.rb +0 -3
- data/test/adapters/mysql2_makara.rb +0 -3
- data/test/adapters/mysql2_proxy.rb +0 -3
- data/test/adapters/mysql2spatial.rb +0 -3
- data/test/adapters/postgis.rb +0 -3
- data/test/adapters/postgresql.rb +0 -3
- data/test/adapters/postgresql_makara.rb +0 -3
- data/test/adapters/postgresql_proxy.rb +0 -3
- data/test/adapters/seamless_database_pool.rb +0 -3
- data/test/adapters/spatialite.rb +0 -3
- data/test/adapters/sqlite3.rb +0 -3
- data/test/adapters/trilogy.rb +0 -11
- data/test/database.yml.sample +0 -73
- data/test/github/database.yml +0 -85
- data/test/import_test.rb +0 -970
- data/test/janus_mysql2/import_test.rb +0 -8
- data/test/janus_trilogy/import_test.rb +0 -7
- data/test/jdbcmysql/import_test.rb +0 -7
- data/test/jdbcpostgresql/import_test.rb +0 -6
- data/test/jdbcsqlite3/import_test.rb +0 -6
- data/test/makara_postgis/import_test.rb +0 -10
- data/test/models/account.rb +0 -5
- data/test/models/alarm.rb +0 -4
- data/test/models/animal.rb +0 -8
- data/test/models/author.rb +0 -9
- data/test/models/bike_maker.rb +0 -10
- data/test/models/book.rb +0 -18
- data/test/models/car.rb +0 -5
- data/test/models/card.rb +0 -5
- data/test/models/chapter.rb +0 -6
- data/test/models/composite_book.rb +0 -19
- data/test/models/composite_chapter.rb +0 -12
- data/test/models/customer.rb +0 -18
- data/test/models/deck.rb +0 -8
- data/test/models/dictionary.rb +0 -6
- data/test/models/discount.rb +0 -5
- data/test/models/end_note.rb +0 -6
- data/test/models/group.rb +0 -5
- data/test/models/order.rb +0 -17
- data/test/models/playing_card.rb +0 -4
- data/test/models/promotion.rb +0 -5
- data/test/models/question.rb +0 -5
- data/test/models/rule.rb +0 -5
- data/test/models/tag.rb +0 -12
- data/test/models/tag_alias.rb +0 -11
- data/test/models/topic.rb +0 -31
- data/test/models/user.rb +0 -5
- data/test/models/user_token.rb +0 -6
- data/test/models/vendor.rb +0 -9
- data/test/models/widget.rb +0 -33
- data/test/mysql2/import_test.rb +0 -7
- data/test/mysql2_makara/import_test.rb +0 -8
- data/test/mysql2_proxy/import_test.rb +0 -6
- data/test/mysqlspatial2/import_test.rb +0 -8
- data/test/postgis/import_test.rb +0 -10
- data/test/postgresql/import_test.rb +0 -6
- data/test/postgresql_proxy/import_test.rb +0 -6
- data/test/schema/generic_schema.rb +0 -230
- data/test/schema/jdbcpostgresql_schema.rb +0 -3
- data/test/schema/mysql2_schema.rb +0 -21
- data/test/schema/postgis_schema.rb +0 -3
- data/test/schema/postgresql_schema.rb +0 -94
- data/test/schema/sqlite3_schema.rb +0 -15
- data/test/schema/version.rb +0 -12
- data/test/sqlite3/import_test.rb +0 -6
- data/test/support/active_support/test_case_extensions.rb +0 -73
- data/test/support/assertions.rb +0 -75
- data/test/support/factories.rb +0 -66
- data/test/support/generate.rb +0 -31
- data/test/support/mysql/import_examples.rb +0 -97
- data/test/support/postgresql/import_examples.rb +0 -642
- data/test/support/shared_examples/on_duplicate_key_ignore.rb +0 -45
- data/test/support/shared_examples/on_duplicate_key_update.rb +0 -437
- data/test/support/shared_examples/recursive_import.rb +0 -352
- data/test/support/sqlite3/import_examples.rb +0 -232
- data/test/synchronize_test.rb +0 -43
- data/test/test_helper.rb +0 -91
- data/test/trilogy/import_test.rb +0 -7
- data/test/value_sets_bytes_parser_test.rb +0 -106
- data/test/value_sets_records_parser_test.rb +0 -34
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18ab977c921d6e9c51ca329d136998d858ddbe3cae0a186160886cd43ee6b6e9
|
|
4
|
+
data.tar.gz: 98d166b037d997de14492f621099ffb63af16505da1c8c36a2e302a903213777
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2a593859fb0b568b88e29e99e849257b536a78b87c9557e1f98fe196a8c1c0be3116c88676c74c58044f76cb69a2ae17a6093fcc463bd2ad5d914f551229c9b2
|
|
7
|
+
data.tar.gz: 10b347057b09a027bbaafc752363553ed117ada314ced7c383276863b9989eda8ec92e9eabee8697099c5b6db7b6e909002a7f86d40df821438b9dabadb15f55
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
## Changes in 2.3.0
|
|
2
|
+
|
|
3
|
+
### New Features
|
|
4
|
+
|
|
5
|
+
* Add Support for trilogy_proxy from [active_record_proxy_adapters](https://rubygems.org/gems/active_record_proxy_adapters) by @mateuscruz via #887.
|
|
6
|
+
* Add Support for sqlite3_proxy from [active_record_proxy_adapters](https://rubygems.org/gems/active_record_proxy_adapters) by @mateuscruz via #887.
|
|
7
|
+
* Add affected rows support for the MySQL adapter. `ActiveRecord::Import::Result` now carries an
|
|
8
|
+
`affected_rows` member, which reports the number of rows the server actually reported as
|
|
9
|
+
affected when the adapter exposes it (`nil` otherwise). This is most useful with
|
|
10
|
+
`on_duplicate_key_update`, where the count distinguishes inserted from updated rows.
|
|
11
|
+
Thanks to @ehasrouni via #882 and #885.
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
* Fix `NoMethodError: undefined method 'validation_context='` when importing with validations
|
|
16
|
+
against Rails main (8.2.0.alpha). Rails removed ActiveModel's private `validation_context=`
|
|
17
|
+
writer in rails/rails@0f9d1270834a6407a59637650bf910d8ae826169 in favor of a validation
|
|
18
|
+
context object reachable through `context_for_validation`. `ActiveRecord::Import::Validator`
|
|
19
|
+
now sets and restores the validation context through whichever API the loaded ActiveModel
|
|
20
|
+
provides. Thanks to @yu-yaba via #900.
|
|
21
|
+
* Fix adapter-specific import support (e.g. `on_duplicate_key_update`) never loading for
|
|
22
|
+
a connection established via `connects_to`/`ActiveRecord::ConnectionAdapters::
|
|
23
|
+
ConnectionHandler#establish_connection` instead of `ActiveRecord::Base.establish_connection`
|
|
24
|
+
directly - most commonly hit with a Rails multi-database secondary connection. The lazy
|
|
25
|
+
adapter loader now hooks `ConnectionHandler#establish_connection` instead of
|
|
26
|
+
`ActiveRecord::Base.establish_connection`, so it fires for every connection regardless of
|
|
27
|
+
how it was established. Thanks to @mateuscruz via #886.
|
|
28
|
+
* Fix `active_record_proxy_adapters` support, which was not loading the import adapter for
|
|
29
|
+
proxied connections. Thanks to @mateuscruz via #880.
|
|
30
|
+
* Use `with_connection` instead of `ActiveRecord::Base.connection`, which is deprecated as of
|
|
31
|
+
ActiveRecord 7.2. Thanks to @nerdrew via #875 and #876.
|
|
32
|
+
* Reduce the size of the published gem by excluding test files. Thanks to @yuri-zubov via #893.
|
|
33
|
+
|
|
1
34
|
## Changes in 2.2.0
|
|
2
35
|
|
|
3
36
|
### New Features
|
data/README.markdown
CHANGED
|
@@ -121,20 +121,20 @@ Book.import values
|
|
|
121
121
|
The `import` method can take an array of column names and an array of hash objects. The column names are used to determine what fields of data should be imported. The following example will only import books with the `title` field:
|
|
122
122
|
|
|
123
123
|
```ruby
|
|
124
|
-
|
|
124
|
+
values = [
|
|
125
125
|
{ title: "Book 1", author: "George Orwell" },
|
|
126
126
|
{ title: "Book 2", author: "Bob Jones" }
|
|
127
127
|
]
|
|
128
128
|
columns = [ :title ]
|
|
129
129
|
|
|
130
130
|
# without validations
|
|
131
|
-
Book.import columns,
|
|
131
|
+
Book.import columns, values, validate: false
|
|
132
132
|
|
|
133
133
|
# with validations
|
|
134
|
-
Book.import columns,
|
|
134
|
+
Book.import columns, values, validate: true
|
|
135
135
|
|
|
136
136
|
# when not specified :validate defaults to true
|
|
137
|
-
Book.import columns,
|
|
137
|
+
Book.import columns, values
|
|
138
138
|
|
|
139
139
|
# result in table books
|
|
140
140
|
# title | author
|
|
@@ -296,7 +296,7 @@ book.reload.title # => "Book1" (stayed the same)
|
|
|
296
296
|
book.reload.author # => "George Orwell" (stayed the same)
|
|
297
297
|
```
|
|
298
298
|
|
|
299
|
-
The option `:on_duplicate_key_ignore` is bypassed when `:recursive` is enabled for [PostgreSQL imports](https://
|
|
299
|
+
The option `:on_duplicate_key_ignore` is bypassed when `:recursive` is enabled for [PostgreSQL imports](https://rubydoc.info/gems/activerecord-import/ActiveRecord/Base#label-Options) (`:recursive` is not supported with other adapters).
|
|
300
300
|
|
|
301
301
|
#### Duplicate Key Update
|
|
302
302
|
|
|
@@ -507,10 +507,10 @@ The following database adapters are currently supported:
|
|
|
507
507
|
* MySQL2 - supports core import functionality plus on duplicate key update support (included in activerecord-import 0.2.0 and higher)
|
|
508
508
|
* PostgreSQL - supports core import functionality (included in activerecord-import 0.1.0 and higher)
|
|
509
509
|
* SQLite3 - supports core import functionality (included in activerecord-import 0.1.0 and higher)
|
|
510
|
-
* Oracle - supports core import functionality through DML trigger (available as an external gem: [activerecord-import-oracle_enhanced](https://github.com/keeguon/activerecord-import-oracle_enhanced)
|
|
511
|
-
* SQL Server - supports core import functionality (available as an external gem: [activerecord-import-sqlserver](https://github.com/keeguon/activerecord-import-sqlserver)
|
|
510
|
+
* Oracle - supports core import functionality through DML trigger (available as an external gem: [activerecord-import-oracle_enhanced](https://github.com/keeguon/activerecord-import-oracle_enhanced))
|
|
511
|
+
* SQL Server - supports core import functionality (available as an external gem: [activerecord-import-sqlserver](https://github.com/keeguon/activerecord-import-sqlserver))
|
|
512
512
|
|
|
513
|
-
If your adapter isn't listed here, please consider creating an external gem as described in the README to provide support. If you do, feel free to update this
|
|
513
|
+
If your adapter isn't listed here, please consider creating an external gem as described in the README to provide support. If you do, feel free to update this README to include a link to the new adapter's repository!
|
|
514
514
|
|
|
515
515
|
To test which features are supported by your adapter, use the following methods on a model class:
|
|
516
516
|
* `supports_import?(*args)`
|
|
@@ -624,7 +624,7 @@ See https://github.com/zdennis/activerecord-import/issues/233 for further discus
|
|
|
624
624
|
|
|
625
625
|
### More Information
|
|
626
626
|
|
|
627
|
-
For more information on Activerecord-Import please see its
|
|
627
|
+
For more information on Activerecord-Import please see its docs: https://rubydoc.info/gems/activerecord-import/ActiveRecord/Base
|
|
628
628
|
|
|
629
629
|
To document new information, please add to the README instead of the wiki. See https://github.com/zdennis/activerecord-import/issues/397 for discussion.
|
|
630
630
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/mysql2_proxy_adapter"
|
|
4
|
+
require "activerecord-import/adapters/mysql2_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
ActiveSupport.on_load(:active_record_mysql2proxyadapter) do |klass|
|
|
7
|
+
klass.include(ActiveRecord::Import::Mysql2ProxyAdapter)
|
|
8
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/postgresql_proxy_adapter"
|
|
4
|
+
require "activerecord-import/adapters/postgresql_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
ActiveSupport.on_load(:active_record_postgresqlproxyadapter) do |klass|
|
|
7
|
+
klass.include(ActiveRecord::Import::PostgreSQLProxyAdapter)
|
|
8
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/sqlite3_proxy_adapter"
|
|
4
|
+
require "activerecord-import/adapters/sqlite3_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
ActiveSupport.on_load(:active_record_sqlite3proxyadapter) do |klass|
|
|
7
|
+
klass.include(ActiveRecord::Import::SQLite3ProxyAdapter)
|
|
8
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record/connection_adapters/trilogy_proxy_adapter"
|
|
4
|
+
require "activerecord-import/adapters/trilogy_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
ActiveSupport.on_load(:active_record_trilogyproxyadapter) do |klass|
|
|
7
|
+
klass.include(ActiveRecord::Import::TrilogyProxyAdapter)
|
|
8
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord::Import::ActiveRecordProxyAdapter
|
|
4
|
+
def insert_many(*args, **kwargs, &block)
|
|
5
|
+
sticking_to_primary { super(*args, **kwargs, &block) }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def insert(*args, **kwargs, &block)
|
|
9
|
+
sticking_to_primary { super(*args, **kwargs, &block) }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def sticking_to_primary(&block)
|
|
13
|
+
ActiveRecord::Base.connected_to(role: writing_role, &block)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def writing_role
|
|
17
|
+
ActiveRecord.try(:writing_role) || ActiveRecord::Base.try(:writing_role) || :writing
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "activerecord-import/adapters/mysql2_adapter"
|
|
4
|
+
require "activerecord-import/adapters/active_record_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
module ActiveRecord::Import::Mysql2ProxyAdapter
|
|
7
|
+
include ActiveRecord::Import::Mysql2Adapter
|
|
8
|
+
include ActiveRecord::Import::ActiveRecordProxyAdapter
|
|
9
|
+
end
|
|
@@ -12,6 +12,7 @@ module ActiveRecord::Import::MysqlAdapter
|
|
|
12
12
|
def insert_many( sql, values, options = {}, *args ) # :nodoc:
|
|
13
13
|
# the number of inserts default
|
|
14
14
|
number_of_inserts = 0
|
|
15
|
+
affected_rows = nil
|
|
15
16
|
|
|
16
17
|
base_sql, post_sql = case sql
|
|
17
18
|
when String
|
|
@@ -37,7 +38,10 @@ module ActiveRecord::Import::MysqlAdapter
|
|
|
37
38
|
if max == NO_MAX_PACKET || total_bytes <= max || options[:force_single_insert]
|
|
38
39
|
number_of_inserts += 1
|
|
39
40
|
sql2insert = base_sql + values.join( ',' ) + post_sql
|
|
40
|
-
|
|
41
|
+
result = execute( sql2insert, *args )
|
|
42
|
+
if result.respond_to?(:affected_rows)
|
|
43
|
+
affected_rows = (affected_rows || 0) + result.affected_rows
|
|
44
|
+
end
|
|
41
45
|
else
|
|
42
46
|
value_sets = ::ActiveRecord::Import::ValueSetsBytesParser.parse(values,
|
|
43
47
|
reserved_bytes: sql_size,
|
|
@@ -47,12 +51,15 @@ module ActiveRecord::Import::MysqlAdapter
|
|
|
47
51
|
value_sets.each do |value_set|
|
|
48
52
|
number_of_inserts += 1
|
|
49
53
|
sql2insert = base_sql + value_set.join( ',' ) + post_sql
|
|
50
|
-
|
|
54
|
+
result = execute( sql2insert, *args )
|
|
55
|
+
if result.respond_to?(:affected_rows)
|
|
56
|
+
affected_rows = (affected_rows || 0) + result.affected_rows
|
|
57
|
+
end
|
|
51
58
|
end
|
|
52
59
|
end
|
|
53
60
|
end
|
|
54
61
|
|
|
55
|
-
ActiveRecord::Import::Result.new([], number_of_inserts, [], [])
|
|
62
|
+
ActiveRecord::Import::Result.new([], number_of_inserts, [], [], affected_rows)
|
|
56
63
|
end
|
|
57
64
|
|
|
58
65
|
# Returns the maximum number of bytes that the server will allow
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "activerecord-import/adapters/postgresql_adapter"
|
|
4
|
+
require "activerecord-import/adapters/active_record_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
module ActiveRecord::Import::PostgreSQLProxyAdapter
|
|
7
|
+
include ActiveRecord::Import::PostgreSQLAdapter
|
|
8
|
+
include ActiveRecord::Import::ActiveRecordProxyAdapter
|
|
9
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "activerecord-import/adapters/sqlite3_adapter"
|
|
4
|
+
require "activerecord-import/adapters/active_record_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
module ActiveRecord::Import::SQLite3ProxyAdapter
|
|
7
|
+
include ActiveRecord::Import::SQLite3Adapter
|
|
8
|
+
include ActiveRecord::Import::ActiveRecordProxyAdapter
|
|
9
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "activerecord-import/adapters/trilogy_adapter"
|
|
4
|
+
require "activerecord-import/adapters/active_record_proxy_adapter"
|
|
5
|
+
|
|
6
|
+
module ActiveRecord::Import::TrilogyProxyAdapter
|
|
7
|
+
include ActiveRecord::Import::TrilogyAdapter
|
|
8
|
+
include ActiveRecord::Import::ActiveRecordProxyAdapter
|
|
9
|
+
end
|
|
@@ -11,11 +11,9 @@ module ActiveRecord::Import
|
|
|
11
11
|
case adapter
|
|
12
12
|
when 'mysql2_makara' then 'mysql2'
|
|
13
13
|
when 'mysql2spatial' then 'mysql2'
|
|
14
|
-
when 'mysql2_proxy' then 'mysql2'
|
|
15
14
|
when 'janus_mysql2' then 'mysql2'
|
|
16
15
|
when 'spatialite' then 'sqlite3'
|
|
17
16
|
when 'postgresql_makara' then 'postgresql'
|
|
18
|
-
when 'postgresql_proxy' then 'postgresql'
|
|
19
17
|
when 'makara_postgis' then 'postgresql'
|
|
20
18
|
when 'postgis' then 'postgresql'
|
|
21
19
|
when 'cockroachdb' then 'postgresql'
|