pgslice 0.4.8 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d3a279841af6ee62759c9570149cda73460c674c383aef78d7b99fa5c9840ec
4
- data.tar.gz: 48462eb02783c097d0553071880e75650263d662cf755e8fa977b1d4e25ccc0e
3
+ metadata.gz: 38dff970617c4a96ee7b9234d345e841e0c496d02abbc1900a028a7f0cb46b87
4
+ data.tar.gz: 24aa5b2b515991c0310fc3dc8cf54c6a7f322b4ee8743bc5e745ca85a1831cec
5
5
  SHA512:
6
- metadata.gz: 9c95fe04d9c90f524c9cd778f5a5e05013ff4655982cd4ed1420a024c5c17a97d3de679c86e1d66800a9ee3ab7e29eec8abec8676041d7e07d7ebce96052315f
7
- data.tar.gz: 5d43e4d5dc94f29538abd25bd2e3676dc47e1b5cdce646e345539d7543f4b21fb2d9d33ecb08c69df81283150643ad423817179719f712d963b0aba791c10d89
6
+ metadata.gz: f63af4550ae70f3fe03e3e4104a43652529d0da576f909c23512ea4a3fa12e2b7f3dd9c526821c69f4b01ec685c5f72d9c8988e5ff4ae74f391e846540c068f4
7
+ data.tar.gz: 405bb97384272d35e85fb0395e8ec367d1db62bdd7120cb0c9f03c9faa728c804256949fbc78eaf8c048b21aefe93106b3da60f8f9741e83dbb47aec23e64008
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.5.0 (2023-01-29)
2
+
3
+ - Dropped support for Ruby < 2.5
4
+
1
5
  ## 0.4.8 (2022-02-28)
2
6
 
3
7
  - Fixed error with pg 1.3
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016-2022 Andrew Kane
3
+ Copyright (c) 2016-2023 Andrew Kane
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -14,7 +14,7 @@ pgslice is a command line tool. To install, run:
14
14
  gem install pgslice
15
15
  ```
16
16
 
17
- This will give you the `pgslice` command. You can also install it with [Homebrew](#homebrew). If installation fails, you may need to install [dependencies](#dependencies).
17
+ This will give you the `pgslice` command. You can also install it with [Homebrew](#homebrew) or [Docker](#docker). If installation fails, you may need to install [dependencies](#dependencies).
18
18
 
19
19
  ## Steps
20
20
 
@@ -108,17 +108,17 @@ pgslice add_partitions visits --intermediate --past 1 --future 1
108
108
  ```sql
109
109
  BEGIN;
110
110
 
111
- CREATE TABLE "public"."visits_201808" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2018-08-01') TO ('2018-09-01');
111
+ CREATE TABLE "public"."visits_202108" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2021-08-01') TO ('2021-09-01');
112
112
 
113
- ALTER TABLE "public"."visits_201808" ADD PRIMARY KEY ("id");
113
+ ALTER TABLE "public"."visits_202108" ADD PRIMARY KEY ("id");
114
114
 
115
- CREATE TABLE "public"."visits_201809" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2018-09-01') TO ('2018-10-01');
115
+ CREATE TABLE "public"."visits_202109" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2021-09-01') TO ('2021-10-01');
116
116
 
117
- ALTER TABLE "public"."visits_201809" ADD PRIMARY KEY ("id");
117
+ ALTER TABLE "public"."visits_202109" ADD PRIMARY KEY ("id");
118
118
 
119
- CREATE TABLE "public"."visits_201810" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2018-10-01') TO ('2018-11-01');
119
+ CREATE TABLE "public"."visits_202110" PARTITION OF "public"."visits_intermediate" FOR VALUES FROM ('2021-10-01') TO ('2021-11-01');
120
120
 
121
- ALTER TABLE "public"."visits_201808" ADD PRIMARY KEY ("id");
121
+ ALTER TABLE "public"."visits_202110" ADD PRIMARY KEY ("id");
122
122
 
123
123
  COMMIT;
124
124
  ```
@@ -131,17 +131,17 @@ pgslice fill visits
131
131
  /* 1 of 3 */
132
132
  INSERT INTO "public"."visits_intermediate" ("id", "user_id", "ip", "created_at")
133
133
  SELECT "id", "user_id", "ip", "created_at" FROM "public"."visits"
134
- WHERE "id" > 0 AND "id" <= 10000 AND "created_at" >= '2018-08-01'::date AND "created_at" < '2018-11-01'::date
134
+ WHERE "id" > 0 AND "id" <= 10000 AND "created_at" >= '2021-08-01'::date AND "created_at" < '2021-11-01'::date
135
135
 
136
136
  /* 2 of 3 */
137
137
  INSERT INTO "public"."visits_intermediate" ("id", "user_id", "ip", "created_at")
138
138
  SELECT "id", "user_id", "ip", "created_at" FROM "public"."visits"
139
- WHERE "id" > 10000 AND "id" <= 20000 AND "created_at" >= '2018-08-01'::date AND "created_at" < '2018-11-01'::date
139
+ WHERE "id" > 10000 AND "id" <= 20000 AND "created_at" >= '2021-08-01'::date AND "created_at" < '2021-11-01'::date
140
140
 
141
141
  /* 3 of 3 */
142
142
  INSERT INTO "public"."visits_intermediate" ("id", "user_id", "ip", "created_at")
143
143
  SELECT "id", "user_id", "ip", "created_at" FROM "public"."visits"
144
- WHERE "id" > 20000 AND "id" <= 30000 AND "created_at" >= '2018-08-01'::date AND "created_at" < '2018-11-01'::date
144
+ WHERE "id" > 20000 AND "id" <= 30000 AND "created_at" >= '2021-08-01'::date AND "created_at" < '2021-11-01'::date
145
145
  ```
146
146
 
147
147
  ```sh
@@ -149,11 +149,11 @@ pgslice analyze visits
149
149
  ```
150
150
 
151
151
  ```sql
152
- ANALYZE VERBOSE "public"."visits_201808";
152
+ ANALYZE VERBOSE "public"."visits_202108";
153
153
 
154
- ANALYZE VERBOSE "public"."visits_201809";
154
+ ANALYZE VERBOSE "public"."visits_202109";
155
155
 
156
- ANALYZE VERBOSE "public"."visits_201810";
156
+ ANALYZE VERBOSE "public"."visits_202110";
157
157
 
158
158
  ANALYZE VERBOSE "public"."visits_intermediate";
159
159
  ```
@@ -217,14 +217,14 @@ WHERE
217
217
  Back up and drop older partitions each day, month, or year.
218
218
 
219
219
  ```sh
220
- pg_dump -c -Fc -t <table>_201809 $PGSLICE_URL > <table>_201809.dump
221
- psql -c "DROP TABLE <table>_201809" $PGSLICE_URL
220
+ pg_dump -c -Fc -t <table>_202109 $PGSLICE_URL > <table>_202109.dump
221
+ psql -c "DROP TABLE <table>_202109" $PGSLICE_URL
222
222
  ```
223
223
 
224
224
  If you use [Amazon S3](https://aws.amazon.com/s3/) for backups, [s3cmd](https://github.com/s3tools/s3cmd) is a nice tool.
225
225
 
226
226
  ```sh
227
- s3cmd put <table>_201809.dump s3://<s3-bucket>/<table>_201809.dump
227
+ s3cmd put <table>_202109.dump s3://<s3-bucket>/<table>_202109.dump
228
228
  ```
229
229
 
230
230
  ## Schema Updates
@@ -272,7 +272,7 @@ SELECT * FROM
272
272
  WHERE
273
273
  user_id = 123 AND
274
274
  -- for performance
275
- created_at >= '2018-09-01' AND created_at < '2018-09-02'
275
+ created_at >= '2021-09-01' AND created_at < '2021-09-02'
276
276
  ```
277
277
 
278
278
  For this to be effective, ensure `constraint_exclusion` is set to `partition` (default value) or `on`.
@@ -336,14 +336,27 @@ Postgres 10 introduces [declarative partitioning](https://www.postgresql.org/doc
336
336
 
337
337
  Always make sure your [connection is secure](https://ankane.org/postgres-sslmode-explained) when connecting to a database over a network you don’t fully trust. Your best option is to connect over SSH or a VPN. Another option is to use `sslmode=verify-full`. If you don’t do this, your database credentials can be compromised.
338
338
 
339
- ## Homebrew
339
+ ## Additional Installation Methods
340
340
 
341
- On Mac, you can use:
341
+ ### Homebrew
342
+
343
+ With Homebrew, you can use:
342
344
 
343
345
  ```sh
344
346
  brew install ankane/brew/pgslice
345
347
  ```
346
348
 
349
+ ### Docker
350
+
351
+ Get the [Docker image](https://hub.docker.com/r/ankane/pgslice) with:
352
+
353
+ ```sh
354
+ docker pull ankane/pgslice
355
+ alias pgslice="docker run --rm -e PGSLICE_URL ankane/pgslice"
356
+ ```
357
+
358
+ This will give you the `pgslice` command.
359
+
347
360
  ## Dependencies
348
361
 
349
362
  If installation fails, your system may be missing Ruby or libpq.
@@ -351,7 +364,7 @@ If installation fails, your system may be missing Ruby or libpq.
351
364
  On Mac, run:
352
365
 
353
366
  ```sh
354
- brew install postgresql
367
+ brew install libpq
355
368
  ```
356
369
 
357
370
  On Ubuntu, run:
@@ -375,15 +388,6 @@ gem install specific_install
375
388
  gem specific_install https://github.com/ankane/pgslice.git
376
389
  ```
377
390
 
378
- ## Docker
379
-
380
- ```sh
381
- docker build -t pgslice .
382
- alias pgslice="docker run --rm -e PGSLICE_URL pgslice"
383
- ```
384
-
385
- This will give you the `pgslice` command.
386
-
387
391
  ## Reference
388
392
 
389
393
  - [PostgreSQL Manual](https://www.postgresql.org/docs/current/static/ddl-partitioning.html)
@@ -27,7 +27,7 @@ module PgSlice
27
27
  queries = []
28
28
 
29
29
  if needs_comment
30
- queries << "COMMENT ON TRIGGER #{quote_ident(trigger_name)} ON #{quote_table(table)} is 'column:#{field},period:#{period},cast:#{cast}';"
30
+ queries << "COMMENT ON TRIGGER #{quote_ident(trigger_name)} ON #{quote_table(table)} IS 'column:#{field},period:#{period},cast:#{cast}';"
31
31
  end
32
32
 
33
33
  # today = utc date
@@ -57,7 +57,7 @@ CREATE TABLE #{quote_table(intermediate_table)} (LIKE #{quote_table(table)} INCL
57
57
  # add comment
58
58
  cast = table.column_cast(column)
59
59
  queries << <<-SQL
60
- COMMENT ON TABLE #{quote_table(intermediate_table)} is 'column:#{column},period:#{period},cast:#{cast},version:#{version}';
60
+ COMMENT ON TABLE #{quote_table(intermediate_table)} IS 'column:#{column},period:#{period},cast:#{cast},version:#{version}';
61
61
  SQL
62
62
  else
63
63
  queries << <<-SQL
@@ -87,7 +87,7 @@ CREATE TRIGGER #{quote_ident(trigger_name)}
87
87
 
88
88
  cast = table.column_cast(column)
89
89
  queries << <<-SQL
90
- COMMENT ON TRIGGER #{quote_ident(trigger_name)} ON #{quote_table(intermediate_table)} is 'column:#{column},period:#{period},cast:#{cast}';
90
+ COMMENT ON TRIGGER #{quote_ident(trigger_name)} ON #{quote_table(intermediate_table)} IS 'column:#{column},period:#{period},cast:#{cast}';
91
91
  SQL
92
92
  end
93
93
 
@@ -1,3 +1,3 @@
1
1
  module PgSlice
2
- VERSION = "0.4.8"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/pgslice.rb CHANGED
@@ -7,16 +7,16 @@ require "cgi"
7
7
  require "time"
8
8
 
9
9
  # modules
10
- require "pgslice/helpers"
11
- require "pgslice/table"
12
- require "pgslice/version"
10
+ require_relative "pgslice/helpers"
11
+ require_relative "pgslice/table"
12
+ require_relative "pgslice/version"
13
13
 
14
14
  # commands
15
- require "pgslice/cli"
16
- require "pgslice/cli/add_partitions"
17
- require "pgslice/cli/analyze"
18
- require "pgslice/cli/fill"
19
- require "pgslice/cli/prep"
20
- require "pgslice/cli/swap"
21
- require "pgslice/cli/unprep"
22
- require "pgslice/cli/unswap"
15
+ require_relative "pgslice/cli"
16
+ require_relative "pgslice/cli/add_partitions"
17
+ require_relative "pgslice/cli/analyze"
18
+ require_relative "pgslice/cli/fill"
19
+ require_relative "pgslice/cli/prep"
20
+ require_relative "pgslice/cli/swap"
21
+ require_relative "pgslice/cli/unprep"
22
+ require_relative "pgslice/cli/unswap"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgslice
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
11
+ date: 2023-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -73,14 +73,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: '2.2'
76
+ version: '2.5'
77
77
  required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  requirements: []
83
- rubygems_version: 3.3.3
83
+ rubygems_version: 3.4.1
84
84
  signing_key:
85
85
  specification_version: 4
86
86
  summary: Postgres partitioning as easy as pie