Class: GDK::Postgresql
- Inherits:
-
Object
- Object
- GDK::Postgresql
- Defined in:
- lib/gdk/postgresql.rb
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #createdb(*args) ⇒ Object
- #current_data_dir ⇒ Object
- #current_version ⇒ Object
- #db_exists?(dbname) ⇒ Boolean
- #in_recovery? ⇒ Boolean
-
#initialize(config = GDK.config) ⇒ Postgresql
constructor
A new instance of Postgresql.
- #installed? ⇒ Boolean
- #psql_cmd(args) ⇒ Object
- #ready?(try_times: 10) ⇒ Boolean
- #upgrade ⇒ Object
- #upgrade_needed?(target_version = self.class.target_version_major) ⇒ Boolean
- #use_tcp? ⇒ Boolean
Constructor Details
#initialize(config = GDK.config) ⇒ Postgresql
Returns a new instance of Postgresql.
13 14 15 |
# File 'lib/gdk/postgresql.rb', line 13 def initialize(config = GDK.config) @config = config end |
Class Method Details
.target_version ⇒ Object
5 6 7 |
# File 'lib/gdk/postgresql.rb', line 5 def self.target_version Gem::Version.new(Asdf::ToolVersions.new.default_version_for('postgres')) end |
.target_version_major ⇒ Object
9 10 11 |
# File 'lib/gdk/postgresql.rb', line 9 def self.target_version_major target_version.canonical_segments[0] end |
Instance Method Details
#createdb(*args) ⇒ Object
75 76 77 78 79 |
# File 'lib/gdk/postgresql.rb', line 75 def createdb(*args) cmd = pg_cmd(*args, program: 'createdb') Shellout.new(cmd).run end |
#current_data_dir ⇒ Object
21 22 23 |
# File 'lib/gdk/postgresql.rb', line 21 def current_data_dir @current_data_dir ||= postgresql_config.data_dir end |
#current_version ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/gdk/postgresql.rb', line 25 def current_version @current_version ||= begin raise "PG_VERSION not found in #{pg_version_file}. Is PostgreSQL initialized?" unless installed? version = pg_version_file.read.to_f # After PostgreSQL 9.6, PG_VERSION uses a single integer (10, 11, 12, etc.) version >= 10 ? version.to_i : version end end |
#db_exists?(dbname) ⇒ Boolean
71 72 73 |
# File 'lib/gdk/postgresql.rb', line 71 def db_exists?(dbname) Shellout.new(pg_cmd(database: dbname)).tap(&:try_run).success? end |
#in_recovery? ⇒ Boolean
81 82 83 84 85 86 87 |
# File 'lib/gdk/postgresql.rb', line 81 def in_recovery? cmd = pg_cmd('--no-psqlrc', '--tuples-only', database: 'postgres', command: 'SELECT pg_is_in_recovery();') Shellout.new(cmd).try_run.downcase.strip.chomp == 't' end |
#installed? ⇒ Boolean
36 37 38 |
# File 'lib/gdk/postgresql.rb', line 36 def installed? pg_version_file.exist? end |
#psql_cmd(args) ⇒ Object
17 18 19 |
# File 'lib/gdk/postgresql.rb', line 17 def psql_cmd(args) pg_cmd(args, database: default_database).flatten end |
#ready?(try_times: 10) ⇒ Boolean
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gdk/postgresql.rb', line 40 def ready?(try_times: 10) last_error = nil cmd = pg_cmd(database: 'template1') try_times.times do shellout = Shellout.new(cmd).tap(&:try_run) last_error = shellout.read_stderr return true if shellout.success? sleep 1 end GDK::Output.error(last_error) false end |
#upgrade ⇒ Object
65 66 67 68 69 |
# File 'lib/gdk/postgresql.rb', line 65 def upgrade cmd = 'support/upgrade-postgresql' Shellout.new(cmd).stream end |
#upgrade_needed?(target_version = self.class.target_version_major) ⇒ Boolean
61 62 63 |
# File 'lib/gdk/postgresql.rb', line 61 def upgrade_needed?(target_version = self.class.target_version_major) current_version < target_version.to_f end |
#use_tcp? ⇒ Boolean
57 58 59 |
# File 'lib/gdk/postgresql.rb', line 57 def use_tcp? !postgresql_config.host.start_with?('/') end |