aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql
Commit message (Collapse)AuthorAgeFilesLines
* Fix `deserialize` with JSON arrayRyuta Kamizono2017-03-061-1/+1
| | | | Fixes #28285.
* Use `max_identifier_length` for `index_name_length` in PostgreSQL adapterRyuta Kamizono2017-02-271-4/+0
| | | | | Actually `index_name_length` depend on `max_identifier_length`, not always 63.
* Fix `change_column` to drop default with `null: false`Ryuta Kamizono2017-02-261-1/+1
| | | | | | | | | | | | | | | | Currently `change_column` cannot drop default if `null: false` is specified at the same time. This change fixes the issue. ```ruby # cannot drop default change_column "tests", "contributor", :boolean, default: nil, null: false # we need the following workaround currently change_column "tests", "contributor", :boolean, null: false change_column "tests", "contributor", :boolean, default: nil ``` Closes #26582
* Should keep the primary key column orderRyuta Kamizono2017-02-141-0/+1
| | | | | | Fixes CI failure caused by #27961. https://travis-ci.org/rails/rails/jobs/201472146#L2390-L2409
* Simplify and optimize Postgres query for primary_keys()Jordan Lewis2017-02-131-10/+10
| | | | | | | | | | | | primary_keys(table) needs to query various metadata tables in Postgres to determine the primary key for the table. Previously, it did so using a complex common table expression against pg_constraint and pg_attribute. This patch simplifies the query by using information_schema tables. This simplifies the logic, making the query far easier to understand, and additionally avoids an expensive unnest, window function query, and common table expression.
* Merge pull request #26930 from kamipo/index_name_exists_defaultRafael França2017-02-131-1/+6
|\ | | | | The `default` arg of `index_name_exists?` makes to optional
| * Deprecate passing `default` to `index_name_exists?`Ryuta Kamizono2017-02-131-0/+5
| |
| * The `default` arg of `index_name_exists?` makes to optionalRyuta Kamizono2017-02-131-1/+1
| | | | | | | | | | | | The `default` arg of `index_name_exists?` is only used the adapter does not implemented `indexes`. But currently all adapters implemented `indexes` (See #26688). Therefore the `default` arg is never used.
* | Merge pull request #26630 from kamipo/quoted_binaryRafael França2017-02-131-2/+4
|\ \ | |/ |/| Extract `quoted_binary` and use it rather than override `_quote`
| * Extract `quoted_binary` and use it rather than override `_quote`Ryuta Kamizono2016-09-271-2/+4
| | | | | | | | | | | | | | Each databases have different binary representation. Therefore all adapters overrides `_quote` for quoting binary. Extract `quoted_binary` for quoting binary and use it rather than override `_quote`.
* | Schema dumping support for PostgreSQL oid typeRyuta Kamizono2017-02-123-0/+18
| | | | | | | | Closes #27980
* | Schema dumping support for PostgreSQL interval typeRyuta Kamizono2017-02-122-1/+6
| | | | | | | | Closes #27979
* | Revert "Simplify and speed up Postgres query for primary_keys"Ryuta Kamizono2017-02-101-8/+10
| | | | | | | | This reverts commit d6529af2954a67bd57fda45286fa9cfd0ff6b5ac.
* | Simplify and speed up Postgres query for primary_keysJordan Lewis2017-02-091-10/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | primary_keys(table) needs to query various metadata tables in Postgres to determine the primary key for the table. Previously, it did so using a complex common table expression against pg_constraint and pg_attribute. This patch simplifies the query by joining pg_index against pg_attribute instead of going through pg_constraint. This avoids an expensive unnest, window function query, and common table expression. EXPLAINing these queries in Postgres against a database with a single table with a composite primary key shows a 66% reduction in the plan and execute latencies. This is significant during application startup time, especially against very large schemas, where these queries would be even slower and more numerous. Closes #27949
* | Refactor `ColumnDefinition` to contain `options` hashRyuta Kamizono2017-02-093-36/+19
| | | | | | | | | | | | Column options are passed as an hash args then used as `options` hash in `add_column_options!`. Converting args to attributes is inconvinient for using options as an hash.
* | Restore the behaviour of the compatibility layer for integer-like PKsRyuta Kamizono2017-02-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PR #27384 changed migration compatibility behaviour. ```ruby class CreateMasterData < ActiveRecord::Migration[5.0] def change create_table :master_data, id: :integer do |t| t.string :name end end end ``` Previously this migration created non-autoincremental primary key expected. But after the PR, the primary key changed to autoincremental, it is unexpected. This change restores the behaviour of the compatibility layer.
* | Correctly dump integer-like primary key with default nilRyuta Kamizono2017-02-041-9/+5
| | | | | | | | | | | | | | The PR #27384 changed integer-like primary key to be autoincrement unless an explicit default. This means that integer-like primary key is restored as autoincrement unless dumping the default nil explicitly. We should dump integer-like primary key with default nil correctly.
* | Tweak bigint PK handlingMatthew Draper2017-01-181-0/+1
| | | | | | | | | | | | * Don't force PKs on tables that have explicitly opted out * All integer-like PKs are autoincrement unless they have an explicit default
* | Revert "Merge pull request #21233 from ↵Rafael Mendonça França2017-01-031-43/+4
| | | | | | | | | | | | | | | | | | | | mtsmfm/disable-referential-integrity-without-superuser-privileges" This reverts commit eeac6151a55cb7d5f799e1ae33aa64a839cbc3aa, reversing changes made to 5c40239d3104543e70508360d27584a3e4dc5baf. Reason: Broke the isolated tests. https://travis-ci.org/rails/rails/builds/188721346
* | Merge pull request #21233 from ↵Rafael França2017-01-031-4/+43
|\ \ | | | | | | | | | | | | mtsmfm/disable-referential-integrity-without-superuser-privileges Use `SET CONSTRAINTS` for `disable_referential_integrity` without superuser privileges
| * | Use `SET CONSTRAINTS` for `disable_referential_integrity` without superuser ↵Fumiaki MATSUSHIMA2016-12-031-4/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | privileges ref: 72c1557254 - We must use `authors` fixture with `author_addresses` because of its foreign key constraint. - Tests require PostgreSQL >= 9.4.2 because it had a bug about `ALTER CONSTRAINTS` and fixed in 9.4.2.
* | | Merge pull request #25522 from ↵Rafael França2017-01-031-10/+14
|\ \ \ | | | | | | | | | | | | | | | | kamipo/fix_select_rows_method_signature_for_consistency Fix `select_rows` method signature for consistency
| * | | Fix `select_rows` method signature for consistencyRyuta Kamizono2017-01-041-10/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Related #22973, #24708. `select_all`, `select_one`, `select_value`, and `select_values` method signature is `(arel, name = nil, binds = [])`. But `select_rows` is `(sql, name = nil, binds = [])`.
* | | | Remove unneeded requires at active recordRafael Mendonça França2017-01-031-2/+0
| | | |
* | | | Deprecate passing `name` to `indexes` like `tables`Ryuta Kamizono2017-01-041-1/+7
|/ / / | | | | | | | | | | | | Passing `name` to `tables` is already deprecated at #21601. Passing `name` to `indexes` is also unused.
* | | Compare deserialized values for `PostgreSQL::OID::Hstore` typesJon Moss2017-01-031-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Per the regression commit below, the commit changes the behavior of `#changed?`to consult the `#changed_in_place?` method on `Type::Value` classes. Per this change, `PostgreSQL::OID::Hstore` needs to override this method in order to compare the deserialized forms of the two arguments. In Ruby, two hashes are considered equal even if their key order is different. This commit helps to bring that behavior to `Hstore` values. Fixes regression introduced by 8e633e505880755e7e366ccec2210bbe2b5436e7 Fixes #27502
* | | Consistently apply adapter behavior when serializing arraysSean Griffin2017-01-032-13/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In f1a0fa9 we moved backend specific timestamp behavior out of the type and into the adapter. This was in line with our general attempt to reduce the number of adapter specific type subclasses. However, on PG, the array type performs all serialization, including database encoding in its serialize method. This means that we have converted the value into a string before reaching the database, so no adapter specific logic can be applied (and this also means that timestamp arrays were using the default `.to_s` method on the given object, which likely meant timestamps were being ignored in certain cases as well) Ultimately I want to do a more in depth refactoring which separates database serializer objects from the active model type objects, to give us a less awkward API for introducing the attributes API onto Active Model. However, in the short term, we follow the solution we've applied elsewhere for this. Move behavior off of the type and into the adapter, and use a data object to allow the type to communicate information up the stack. Fixes #27514.
* | | Dump array subtype options correctlyRyuta Kamizono2017-01-011-1/+1
| | | | | | | | | | | | | | | Currently schema dumper does not dump array subtype `precision` and `scale` options. This commit fixes the issue.
* | | `#tables` and `#table_exists?` and returns only tables and not viewsRafael Mendonça França2016-12-291-20/+22
| | |
* | | Remove deprecated `name` argument from `#tables`Rafael Mendonça França2016-12-291-7/+1
| | |
* | | Sync the visibility of `sql_for_insert` to privateRyuta Kamizono2016-12-291-1/+1
| | | | | | | | | | | | | | | The visibility of all internal protected methods was changed to private since 5b14129.
* | | AR::ConnectionAdapters::PostgreSQL::Name#parts is called from other instancesAkira Matsuda2016-12-251-4/+6
| | |
* | | Privatize unneededly protected methods in Active RecordAkira Matsuda2016-12-241-1/+1
| | |
* | | Describe what we are protectingAkira Matsuda2016-12-231-0/+2
| | |
* | | Merge pull request #27274 from kamipo/primary_key_with_auto_increment_and_bigintMatthew Draper2016-12-061-2/+6
|\ \ \ | | | | | | | | Make `:auto_increment` option works on `:bigint`
| * | | Make `:auto_increment` option works on `:bigint`Ryuta Kamizono2016-12-061-2/+6
| | | | | | | | | | | | | | | | Follow up to #27272.
* | | | Change MySQL and Postgresql to use Bigint primary keysJon McCartie2016-12-051-1/+1
|/ / /
* / / Make `:auto_increment` to internal primary key optionRyuta Kamizono2016-12-061-1/+6
|/ / | | | | | | | | | | Using `:auto_increment` option for abstracting the DB-specific auto incremental types. It is worth to ease to implement the compatibility layer.
* | Followup of UUID default extension in the docs [ci skip]Prathamesh Sonpatki2016-11-241-5/+15
| | | | | | | | | | | | | | - Mentioned clearly that for PostgreSQL < 9.4, you need to pass the default option with "uuid_generate_v4()" - Also updated PostgreSQL Active Record guide with this change. - https://github.com/rails/rails/pull/25395#r66877078
* | For `PostgreSQL >= 9.4` use `gen_random_uuid()`Yaw Boakye2016-11-221-8/+9
| | | | | | | | | | | | | | | | | | | | Since 9.4, PostgreSQL recommends using `pgcrypto`'s `gen_random_uuid()` to generate version 4 UUIDs instead of the functions in the `uuid-ossp` extension. These changes uses the appropriate UUID function depending on the underlying PostgreSQL server's version, while maintaining `uuid_generate_v4()` in older migrations.
* | Merge pull request #27076 from y-yagi/fix_postgresql_array_encodingSean Griffin2016-11-171-1/+1
|\ \ | | | | | | use `force_encoding` instread of `encode!` to avoid `UndefinedConversionError`
| * | use `force_encoding` instread of `encode!` to avoid `UndefinedConversionError`yuuji.yaginuma2016-11-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `PG::TextEncoder::Array#encode` returns the encoded value with `ASCII-8BIT`. But in some cases, trying to convert `ASCII-8BIT` to `UTF-8` cause an error. ```ruby "{\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB}".encode!(Encoding::UTF_8) # => Encoding::UndefinedConversionError: "\xE3" from ASCII-8BIT to UTF-8 ``` Should use `force_encoding` to avoid this error. Follow up to 7ba3a48df5bfdc5e98506bb829f937e03b55a5b3 Ref: https://github.com/rails/rails/pull/23619#issuecomment-189924036
* | | Support AC::Parameters for PG HStoreJon Moss2016-11-151-0/+2
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | As reported via #26904, there is a regression in how values for Postgres' HStore column type are being processed, beginning in Rails 5. Currently, the way that Active Record checks whether or not values need to be serialized and put into the correct storage format is whether or not it is a `Hash` object. Since `ActionController::Parameters` no longer inherits from `Hash` in Rails 5, this conditional now returns false. To remedy this, we are now checking to see whether the `value` parameters being passed in responds to a certain method, and then calling the `serialize` method, except this time with a real Hash object. Keeping things DRY! Fixes #26904.
* | Merge pull request #26905 from bogdanvlviv/docsAndrew White2016-11-131-1/+1
|\ \ | | | | | | Add missing `+` around a some literals.
| * | Add missing `+` around a some literals.bogdanvlviv2016-10-271-1/+1
| | | | | | | | | | | | | | | | | | Mainly around `nil` [ci skip]
* | | Refactor column initialization into `new_column_from_field`Kir Shatrov2016-11-111-15/+17
| | | | | | | | | | | | that accepts results of SHOW FIELDS
* | | Add more rubocop rules about whitespacesRafael Mendonça França2016-10-291-2/+2
| | |
* | | Permit loads while queries are runningMatthew Draper2016-10-271-2/+6
| | | | | | | | | | | | | | | A query may wait on a database-level lock, which could lead to a deadlock between threads.
* | | Use Regexp#match? rather than Regexp#===Ryuta Kamizono2016-10-262-3/+3
|/ / | | | | | | Follow up to 99cf7558000090668b137085bfe6bcc06c4571dc.
* | Quote table name properlyRyuta Kamizono2016-10-141-8/+8
| | | | | | | | If does not quote table name properly, invalid SQL is generated.