Class: GDK::Postgresql

Inherits:
Object
  • Object
show all
Defined in:
lib/gdk/postgresql.rb

Direct Known Subclasses

PostgresqlGeo

Class Method Summary collapse

Instance Method Summary collapse

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_versionObject



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_majorObject



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_dirObject



21
22
23
# File 'lib/gdk/postgresql.rb', line 21

def current_data_dir
  @current_data_dir ||= postgresql_config.data_dir
end

#current_versionObject



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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

#upgradeObject



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

Returns:

  • (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

Returns:

  • (Boolean)


57
58
59
# File 'lib/gdk/postgresql.rb', line 57

def use_tcp?
  !postgresql_config.host.start_with?('/')
end