pg_materialized_view 0.0.1
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 +7 -0
- data/lib/pg_materialized_view.rb +42 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1ed7619ba16abdfe04ea6cc9b223d1770c3cce07
|
4
|
+
data.tar.gz: e155e9a9916a5a1bd869c506c81a4d071d453552
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9c3a508aae2681b4978388a17fbc9fcfe5262095473bc9fe6dbda48ffa8ad684348f43a43de7f752d4592fe32e0ad1d09259dd1a40e5119a4fa6e566974012ee
|
7
|
+
data.tar.gz: a8749b5a536e5092d6b40418938009365d8b393c3ac94515762562812dc26ae3e0a62c8ae6ee96572ca4ed702c634e65dd91a4391feea77f953e548641b60f35
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class PgMaterializedView
|
2
|
+
|
3
|
+
def self.db
|
4
|
+
ActiveRecord::Base.connection
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.instances
|
8
|
+
@instances ||= Hash.new { |h, name| h[name] = new(name) }
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.names
|
12
|
+
db.select_values("SELECT oid::regclass::text FROM pg_class WHERE relkind = 'm'")
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.[](name)
|
16
|
+
name = name.to_s
|
17
|
+
raise "not a materialized view: #{name}" unless names.include?(name)
|
18
|
+
instances[name]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.all
|
22
|
+
names.map { |name| instances[name] }
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_reader :name
|
26
|
+
|
27
|
+
def initialize(name)
|
28
|
+
@name = name
|
29
|
+
end
|
30
|
+
|
31
|
+
# Public: refresh the materialized view, populates the view if needed
|
32
|
+
def refresh
|
33
|
+
begin
|
34
|
+
self.class.db.execute("REFRESH MATERIALIZED VIEW CONCURRENTLY #{name}")
|
35
|
+
rescue ActiveRecord::StatementInvalid => e
|
36
|
+
raise e unless e.message =~ /CONCURRENTLY cannot be used when the materialized view is not populated/
|
37
|
+
self.class.db.execute("REFRESH MATERIALIZED VIEW #{name}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pg_materialized_view
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lukas Rieder
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email: l.rieder@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/pg_materialized_view.rb
|
20
|
+
homepage: https://github.com/Overbryd/pg_materialized_view
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.5.2
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Simplify materialized view introspection management with ActiveRecord/PostgreSQL
|
44
|
+
test_files: []
|