Instance methods for datasets that connect to a PostgreSQL database.
Add the disable_insert_returning! mutation method
# File lib/sequel/adapters/shared/postgres.rb, line 616 def self.extended(obj) obj.def_mutation_method(:disable_insert_returning) end
Add the disable_insert_returning! mutation method
# File lib/sequel/adapters/shared/postgres.rb, line 621 def self.included(mod) mod.def_mutation_method(:disable_insert_returning) end
Return the results of an ANALYZE query as a string
# File lib/sequel/adapters/shared/postgres.rb, line 626 def analyze explain(:analyze=>true) end
Disable the use of INSERT RETURNING, even if the server supports it
# File lib/sequel/adapters/shared/postgres.rb, line 631 def disable_insert_returning clone(:disable_insert_returning=>true) end
Return the results of an EXPLAIN query as a string
# File lib/sequel/adapters/shared/postgres.rb, line 636 def explain(opts={}) with_sql((opts[:analyze] ? EXPLAIN_ANALYZE : EXPLAIN) + select_sql).map(QUERY_PLAN).join("\r\n") end
PostgreSQL specific full text search syntax, using tsearch2 (included in 8.3 by default, and available for earlier versions as an add-on).
# File lib/sequel/adapters/shared/postgres.rb, line 647 def full_text_search(cols, terms, opts = {}) lang = opts[:language] || 'simple' filter("to_tsvector(#{literal(lang)}, #{full_text_string_join(cols)}) @@ to_tsquery(#{literal(lang)}, #{literal(Array(terms).join(' | '))})") end
Insert given values into the database.
# File lib/sequel/adapters/shared/postgres.rb, line 653 def insert(*values) if @opts[:sql] execute_insert(insert_sql(*values)) elsif @opts[:disable_insert_returning] || server_version < 80200 execute_insert(insert_sql(*values), :table=>opts[:from].first, :values=>values.size == 1 ? values.first : values) else clone(default_server_opts(:sql=>insert_returning_pk_sql(*values))).single_value end end
Use the RETURNING clause to return the columns listed in returning.
# File lib/sequel/adapters/shared/postgres.rb, line 664 def insert_returning_sql(returning, *values) "#{insert_sql(*values)} RETURNING #{column_list(Array(returning))}" end
Insert a record returning the record inserted
# File lib/sequel/adapters/shared/postgres.rb, line 669 def insert_select(*values) return if opts[:disable_insert_returning] || server_version < 80200 naked.clone(default_server_opts(:sql=>insert_returning_sql(nil, *values))).single_record end
Locks all tables in the dataset’s FROM clause (but not in JOINs) with the specified mode (e.g. ‘EXCLUSIVE’). If a block is given, starts a new transaction, locks the table, and yields. If a block is not given just locks the tables. Note that PostgreSQL will probably raise an error if you lock the table outside of an existing transaction. Returns nil.
# File lib/sequel/adapters/shared/postgres.rb, line 679 def lock(mode, opts={}) if block_given? # perform locking inside a transaction and yield to block @db.transaction(opts){lock(mode, opts); yield} else @db.execute(LOCK % [source_list(@opts[:from]), mode], opts) # lock without a transaction end nil end
For PostgreSQL version > 8.2, allow inserting multiple rows at once.
# File lib/sequel/adapters/shared/postgres.rb, line 689 def multi_insert_sql(columns, values) return super if server_version < 80200 # postgresql 8.2 introduces support for multi-row insert [insert_sql(columns, LiteralString.new('VALUES ' + values.map {|r| literal(Array(r))}.join(COMMA_SEPARATOR)))] end
DISTINCT ON is a PostgreSQL extension
# File lib/sequel/adapters/shared/postgres.rb, line 697 def supports_distinct_on? true end
PostgreSQL supports modifying joined datasets
# File lib/sequel/adapters/shared/postgres.rb, line 702 def supports_modifying_joins? true end
PostgreSQL supports timezones in literal timestamps
# File lib/sequel/adapters/shared/postgres.rb, line 707 def supports_timestamp_timezones? true end
Generated with the Darkfish Rdoc Generator 2.