pgbelt 0.7.6__tar.gz → 0.7.8__tar.gz
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.
- {pgbelt-0.7.6 → pgbelt-0.7.8}/PKG-INFO +1 -1
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/sync.py +1 -1
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/postgres.py +9 -17
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pyproject.toml +11 -11
- {pgbelt-0.7.6 → pgbelt-0.7.8}/LICENSE +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/README.md +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/__init__.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/__init__.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/convenience.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/helpers.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/login.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/preflight.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/schema.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/setup.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/status.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/cmd/teardown.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/config/__init__.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/config/config.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/config/models.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/config/remote.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/main.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/__init__.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/asyncfuncs.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/dump.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/logs.py +0 -0
- {pgbelt-0.7.6 → pgbelt-0.7.8}/pgbelt/util/pglogical.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pgbelt
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.8
|
|
4
4
|
Summary: A CLI tool used to manage Postgres data migrations from beginning to end, for a single database or a fleet, leveraging pglogical replication.
|
|
5
5
|
Author: Varjitt Jeeva
|
|
6
6
|
Author-email: varjitt.jeeva@autodesk.com
|
|
@@ -30,7 +30,7 @@ async def _sync_sequences(
|
|
|
30
30
|
) -> None:
|
|
31
31
|
|
|
32
32
|
seq_vals = await dump_sequences(src_pool, targeted_sequences, schema, src_logger)
|
|
33
|
-
await load_sequences(dst_pool, seq_vals, dst_logger)
|
|
33
|
+
await load_sequences(dst_pool, seq_vals, schema, dst_logger)
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
@run_with_configs
|
|
@@ -15,23 +15,13 @@ async def dump_sequences(
|
|
|
15
15
|
# Get all sequences in the schema
|
|
16
16
|
seqs = await pool.fetch(
|
|
17
17
|
f"""
|
|
18
|
-
SELECT
|
|
18
|
+
SELECT sequence_name
|
|
19
19
|
FROM information_schema.sequences
|
|
20
20
|
WHERE sequence_schema = '{schema}';
|
|
21
21
|
"""
|
|
22
22
|
)
|
|
23
23
|
|
|
24
|
-
# Note
|
|
25
|
-
# This may not be done by the user, so we must do it here.
|
|
26
|
-
proper_sequence_names = None
|
|
27
|
-
if targeted_sequences is not None:
|
|
28
|
-
proper_sequence_names = []
|
|
29
|
-
for seq in targeted_sequences:
|
|
30
|
-
if f"{schema}." not in seq:
|
|
31
|
-
proper_sequence_names.append(f"{schema}.{seq}")
|
|
32
|
-
else:
|
|
33
|
-
proper_sequence_names.append(seq)
|
|
34
|
-
targeted_sequences = proper_sequence_names
|
|
24
|
+
# Note, in exodus migrations, we expect the sequence names to not contain the schema name when coming into targeted_sequences.
|
|
35
25
|
|
|
36
26
|
seq_vals = {}
|
|
37
27
|
final_seqs = []
|
|
@@ -42,14 +32,16 @@ async def dump_sequences(
|
|
|
42
32
|
final_seqs = [r[0] for r in seqs]
|
|
43
33
|
|
|
44
34
|
for seq in final_seqs:
|
|
45
|
-
res = await pool.fetchval(f
|
|
35
|
+
res = await pool.fetchval(f'SELECT last_value FROM {schema}."{seq}";')
|
|
46
36
|
seq_vals[seq.strip()] = res
|
|
47
37
|
|
|
48
38
|
logger.debug(f"Dumped sequences: {seq_vals}")
|
|
49
39
|
return seq_vals
|
|
50
40
|
|
|
51
41
|
|
|
52
|
-
async def load_sequences(
|
|
42
|
+
async def load_sequences(
|
|
43
|
+
pool: Pool, seqs: dict[str, int], schema: str, logger: Logger
|
|
44
|
+
) -> None:
|
|
53
45
|
"""
|
|
54
46
|
given a dict of sequence named mapped to values, set each sequence to the
|
|
55
47
|
matching value
|
|
@@ -60,9 +52,9 @@ async def load_sequences(pool: Pool, seqs: dict[str, int], logger: Logger) -> No
|
|
|
60
52
|
logger.info("No sequences to load. Skipping sequence loading.")
|
|
61
53
|
return
|
|
62
54
|
|
|
63
|
-
logger.info(f"Loading sequences {list(seqs.keys())}...")
|
|
64
|
-
sql_template = "SELECT pg_catalog.setval('{}', {}, true);"
|
|
65
|
-
sql = "\n".join([sql_template.format(k, v) for k, v in seqs.items()])
|
|
55
|
+
logger.info(f"Loading sequences {list(seqs.keys())} from schema {schema}...")
|
|
56
|
+
sql_template = "SELECT pg_catalog.setval('{}.\"{}\"', {}, true);"
|
|
57
|
+
sql = "\n".join([sql_template.format(schema, k, v) for k, v in seqs.items()])
|
|
66
58
|
async with pool.acquire() as conn:
|
|
67
59
|
async with conn.transaction():
|
|
68
60
|
await conn.execute(sql)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pgbelt"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.8"
|
|
4
4
|
description = "A CLI tool used to manage Postgres data migrations from beginning to end, for a single database or a fleet, leveraging pglogical replication."
|
|
5
5
|
authors = ["Varjitt Jeeva <varjitt.jeeva@autodesk.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -18,15 +18,15 @@ tabulate = "^0.9.0"
|
|
|
18
18
|
typer = ">=0.9,<0.13"
|
|
19
19
|
|
|
20
20
|
[tool.poetry.dev-dependencies]
|
|
21
|
-
black = "~24.
|
|
22
|
-
pre-commit = "~3.
|
|
23
|
-
flake8 = "^7.1.
|
|
21
|
+
black = "~24.8.0"
|
|
22
|
+
pre-commit = "~3.8.0"
|
|
23
|
+
flake8 = "^7.1.1"
|
|
24
24
|
pytest-cov = "~5.0.0"
|
|
25
|
-
pytest = "^8.
|
|
25
|
+
pytest = "^8.3.2"
|
|
26
26
|
coverage = {extras = ["toml"], version = "^7.6"}
|
|
27
|
-
safety = "^3.2.
|
|
28
|
-
mypy = "^1.
|
|
29
|
-
xdoctest = {extras = ["colors"], version = "^1.
|
|
27
|
+
safety = "^3.2.7"
|
|
28
|
+
mypy = "^1.11"
|
|
29
|
+
xdoctest = {extras = ["colors"], version = "^1.2.0"}
|
|
30
30
|
flake8-bandit = "~4.1.1"
|
|
31
31
|
flake8-bugbear = ">=21.9.2"
|
|
32
32
|
flake8-docstrings = "^1.6.0"
|
|
@@ -36,9 +36,9 @@ darglint = "^1.8.1"
|
|
|
36
36
|
reorder-python-imports = "^3.13.0"
|
|
37
37
|
pre-commit-hooks = "^4.6.0"
|
|
38
38
|
Pygments = "^2.18.0"
|
|
39
|
-
pyupgrade = "^3.
|
|
40
|
-
pylint = "^3.2.
|
|
41
|
-
pytest-asyncio = "~0.
|
|
39
|
+
pyupgrade = "^3.17.0"
|
|
40
|
+
pylint = "^3.2.7"
|
|
41
|
+
pytest-asyncio = "~0.24.0"
|
|
42
42
|
|
|
43
43
|
[build-system]
|
|
44
44
|
requires = ["poetry-core>=1.0.0", "setuptools"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|