plain.postgres 0.91.0__tar.gz → 0.91.1__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.
Files changed (128) hide show
  1. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/PKG-INFO +1 -1
  2. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/CHANGELOG.md +12 -1
  3. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/converge.py +9 -9
  4. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/sync.py +28 -23
  5. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/pyproject.toml +1 -1
  6. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/.gitignore +0 -0
  7. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/CLAUDE.md +0 -0
  8. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/LICENSE +0 -0
  9. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/README.md +0 -0
  10. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/README.md +0 -0
  11. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/__init__.py +0 -0
  12. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/agents/.claude/rules/plain-postgres.md +0 -0
  13. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/agents/.claude/skills/plain-postgres-doctor/SKILL.md +0 -0
  14. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/aggregates.py +0 -0
  15. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/base.py +0 -0
  16. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/__init__.py +0 -0
  17. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/core.py +0 -0
  18. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/diagnose.py +0 -0
  19. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/migrations.py +0 -0
  20. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/cli/schema.py +0 -0
  21. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/config.py +0 -0
  22. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/connection.py +0 -0
  23. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/connections.py +0 -0
  24. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/constants.py +0 -0
  25. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/constraints.py +0 -0
  26. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/convergence/__init__.py +0 -0
  27. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/convergence/analysis.py +0 -0
  28. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/convergence/fixes.py +0 -0
  29. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/convergence/planning.py +0 -0
  30. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/database_url.py +0 -0
  31. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/db.py +0 -0
  32. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/ddl.py +0 -0
  33. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/default_settings.py +0 -0
  34. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/deletion.py +0 -0
  35. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/dialect.py +0 -0
  36. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/entrypoints.py +0 -0
  37. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/enums.py +0 -0
  38. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/exceptions.py +0 -0
  39. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/expressions.py +0 -0
  40. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/__init__.py +0 -0
  41. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/encrypted.py +0 -0
  42. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/json.py +0 -0
  43. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/mixins.py +0 -0
  44. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/related.py +0 -0
  45. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/related_descriptors.py +0 -0
  46. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/related_lookups.py +0 -0
  47. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/related_managers.py +0 -0
  48. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/reverse_descriptors.py +0 -0
  49. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/reverse_related.py +0 -0
  50. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/fields/timezones.py +0 -0
  51. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/forms.py +0 -0
  52. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/__init__.py +0 -0
  53. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/comparison.py +0 -0
  54. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/datetime.py +0 -0
  55. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/math.py +0 -0
  56. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/mixins.py +0 -0
  57. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/text.py +0 -0
  58. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/functions/window.py +0 -0
  59. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/indexes.py +0 -0
  60. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/introspection/__init__.py +0 -0
  61. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/introspection/health.py +0 -0
  62. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/introspection/schema.py +0 -0
  63. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/lookups.py +0 -0
  64. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/meta.py +0 -0
  65. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/__init__.py +0 -0
  66. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/autodetector.py +0 -0
  67. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/exceptions.py +0 -0
  68. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/executor.py +0 -0
  69. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/graph.py +0 -0
  70. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/loader.py +0 -0
  71. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/migration.py +0 -0
  72. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/operations/__init__.py +0 -0
  73. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/operations/base.py +0 -0
  74. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/operations/fields.py +0 -0
  75. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/operations/models.py +0 -0
  76. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/operations/special.py +0 -0
  77. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/optimizer.py +0 -0
  78. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/questioner.py +0 -0
  79. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/recorder.py +0 -0
  80. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/serializer.py +0 -0
  81. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/state.py +0 -0
  82. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/utils.py +0 -0
  83. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/migrations/writer.py +0 -0
  84. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/options.py +0 -0
  85. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/otel.py +0 -0
  86. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/preflight.py +0 -0
  87. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/query.py +0 -0
  88. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/query_utils.py +0 -0
  89. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/registry.py +0 -0
  90. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/schema.py +0 -0
  91. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/__init__.py +0 -0
  92. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/compiler.py +0 -0
  93. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/constants.py +0 -0
  94. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/datastructures.py +0 -0
  95. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/query.py +0 -0
  96. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/sql/where.py +0 -0
  97. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/test/__init__.py +0 -0
  98. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/test/pytest.py +0 -0
  99. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/test/utils.py +0 -0
  100. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/transaction.py +0 -0
  101. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/types.py +0 -0
  102. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/types.pyi +0 -0
  103. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/plain/postgres/utils.py +0 -0
  104. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0001_initial.py +0 -0
  105. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0002_test_field_removed.py +0 -0
  106. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0003_deleteparent_childsetnull_childsetdefault_and_more.py +0 -0
  107. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0004_defaultquerysetmodel_mixintestmodel_and_more.py +0 -0
  108. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0005_feature_carfeature_car_features.py +0 -0
  109. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/0006_secretstore.py +0 -0
  110. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/migrations/__init__.py +0 -0
  111. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/examples/models.py +0 -0
  112. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/settings.py +0 -0
  113. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/app/urls.py +0 -0
  114. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_connection_isolation.py +0 -0
  115. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_connection_lifecycle.py +0 -0
  116. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_convergence.py +0 -0
  117. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_database_url.py +0 -0
  118. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_delete_behaviors.py +0 -0
  119. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_encrypted_fields.py +0 -0
  120. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_exceptions.py +0 -0
  121. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_introspection.py +0 -0
  122. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_iterator.py +0 -0
  123. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_manager_assignment.py +0 -0
  124. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_models.py +0 -0
  125. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_read_only_transactions.py +0 -0
  126. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_related_descriptors.py +0 -0
  127. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_related_manager_api.py +0 -0
  128. {plain_postgres-0.91.0 → plain_postgres-0.91.1}/tests/test_schema_normalize_type.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.postgres
3
- Version: 0.91.0
3
+ Version: 0.91.1
4
4
  Summary: Model your data and store it in a database.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,16 @@
1
1
  # plain-postgres changelog
2
2
 
3
+ ## [0.91.1](https://github.com/dropseed/plain/releases/plain-postgres@0.91.1) (2026-03-29)
4
+
5
+ ### What's changed
6
+
7
+ - Indented `sync` and `converge` sub-items under section headers for readability in environments without ANSI colors (e.g. Heroku deploy logs). ([b6b494dcc698](https://github.com/dropseed/plain/commit/b6b494dcc698))
8
+ - `sync` now uses `MigrationExecutor` directly instead of calling through the CLI layer, giving cleaner indented output. ([b6b494dcc698](https://github.com/dropseed/plain/commit/b6b494dcc698))
9
+
10
+ ### Upgrade instructions
11
+
12
+ - No changes required.
13
+
3
14
  ## [0.91.0](https://github.com/dropseed/plain/releases/plain-postgres@0.91.0) (2026-03-29)
4
15
 
5
16
  ### What's changed
@@ -22,7 +33,7 @@
22
33
 
23
34
  1. **Replace `migrate` with `postgres sync` in deploy scripts and CI.** `postgres sync` applies migrations and runs convergence in a single step. For CI checks, use `postgres sync --check` instead of `migrate --check` / `makemigrations --check`. The lower-level commands are still available as `migrations create` and `migrations apply`.
24
35
 
25
- 2. **Remove index/constraint operations from migration files.** Delete any `AddIndex`, `RemoveIndex`, `RenameIndex`, `AddConstraint`, and `RemoveConstraint` operations from your migration files — these classes no longer exist and will cause import errors. If removing an operation leaves `operations = []`, delete the migration file and run `plain migrations prune --yes`. Indexes and constraints declared on your models will be created automatically by convergence.
36
+ 2. **Remove index/constraint operations from migration files.** Delete any `AddIndex`, `RemoveIndex`, `RenameIndex`, `AddConstraint`, and `RemoveConstraint` operations from your migration files — these classes no longer exist and will cause import errors. It's fine to leave a migration with `operations = []`. Indexes and constraints declared on your models will be created automatically by convergence.
26
37
 
27
38
  3. **Replace `PositiveIntegerField`** (and `PositiveBigIntegerField`, `PositiveSmallIntegerField`) with `IntegerField` (or `BigIntegerField`, `SmallIntegerField`) in both models and migration files. Add a `CheckConstraint` if you need to enforce positive values.
28
39
 
@@ -66,32 +66,32 @@ def converge(yes: bool, drop_undeclared: bool) -> None:
66
66
  click.secho(f" FAILED: {r.item.describe()} — {r.error}", fg="red")
67
67
 
68
68
  click.echo()
69
- click.secho(result.summary, fg="green" if result.ok else "yellow")
69
+ click.secho(f" {result.summary}", fg="green" if result.ok else "yellow")
70
70
  if not result.ok_for_sync:
71
71
  success = False
72
72
 
73
73
  if plan.blocked:
74
74
  click.echo()
75
- click.secho("Schema changes require a staged rollout:", fg="red", bold=True)
75
+ click.secho(" Schema changes require a staged rollout:", fg="red", bold=True)
76
76
  for item in plan.blocked:
77
- click.secho(f" {item.drift.describe()}", fg="red")
77
+ click.secho(f" {item.drift.describe()}", fg="red")
78
78
  if item.guidance:
79
- click.secho(f" {item.guidance}", fg="red", dim=True)
79
+ click.secho(f" {item.guidance}", fg="red", dim=True)
80
80
  success = False
81
81
 
82
82
  if not drop_undeclared and plan.blocking_cleanup:
83
83
  click.echo()
84
- click.secho("Undeclared constraints still in database:", fg="red", bold=True)
84
+ click.secho(" Undeclared constraints still in database:", fg="red", bold=True)
85
85
  for item in plan.blocking_cleanup:
86
- click.secho(f" {item.describe()}", fg="red")
87
- click.secho("Rerun with --drop-undeclared to remove them.", fg="red")
86
+ click.secho(f" {item.describe()}", fg="red")
87
+ click.secho(" Rerun with --drop-undeclared to remove them.", fg="red")
88
88
  success = False
89
89
 
90
90
  if not drop_undeclared and plan.optional_cleanup:
91
91
  click.echo()
92
92
  for item in plan.optional_cleanup:
93
- click.echo(f" {item.describe()}")
94
- click.echo("Run with --drop-undeclared to remove undeclared indexes.")
93
+ click.echo(f" {item.describe()}")
94
+ click.echo(" Run with --drop-undeclared to remove undeclared indexes.")
95
95
 
96
96
  if not success:
97
97
  sys.exit(1)
@@ -109,19 +109,24 @@ def _create_migrations() -> None:
109
109
 
110
110
 
111
111
  def _migrate() -> None:
112
- from .migrations import apply
112
+ from ..db import get_connection
113
+ from ..migrations.executor import MigrationExecutor
113
114
 
114
115
  click.secho("Applying migrations...", bold=True)
115
- apply.callback(
116
- package_label=None,
117
- migration_name=None,
118
- fake=False,
119
- plan=False,
120
- check_unapplied=False,
121
- no_input=False,
122
- atomic_batch=None,
123
- quiet=False,
124
- )
116
+
117
+ conn = get_connection()
118
+ conn.ensure_connection()
119
+ executor = MigrationExecutor(conn)
120
+ targets = executor.loader.graph.leaf_nodes()
121
+ migration_plan = executor.migration_plan(targets)
122
+
123
+ if not migration_plan:
124
+ click.echo(" No migrations to apply.")
125
+ return
126
+
127
+ click.echo(f" Applying {len(migration_plan)} migration(s)...")
128
+ executor.migrate(targets, plan=migration_plan)
129
+ click.echo(f" Applied {len(migration_plan)} migration(s).")
125
130
 
126
131
 
127
132
  def _converge(*, drop_undeclared: bool) -> None:
@@ -136,38 +141,38 @@ def _converge(*, drop_undeclared: bool) -> None:
136
141
 
137
142
  for r in result.results:
138
143
  if r.ok:
139
- click.echo(f" {r.sql}")
144
+ click.echo(f" {r.sql}")
140
145
  else:
141
- click.secho(f" FAILED: {r.item.describe()} — {r.error}", fg="red")
146
+ click.secho(f" FAILED: {r.item.describe()} — {r.error}", fg="red")
142
147
 
143
- click.secho(result.summary, fg="green" if result.ok else "yellow")
148
+ click.secho(f" {result.summary}", fg="green" if result.ok else "yellow")
144
149
  if not result.ok_for_sync:
145
150
  success = False
146
151
 
147
152
  if plan.blocked:
148
153
  click.echo()
149
- click.secho("Schema changes require a staged rollout:", fg="red", bold=True)
154
+ click.secho(" Schema changes require a staged rollout:", fg="red", bold=True)
150
155
  for item in plan.blocked:
151
- click.secho(f" {item.drift.describe()}", fg="red")
156
+ click.secho(f" {item.drift.describe()}", fg="red")
152
157
  if item.guidance:
153
- click.secho(f" {item.guidance}", fg="red", dim=True)
158
+ click.secho(f" {item.guidance}", fg="red", dim=True)
154
159
  success = False
155
160
 
156
161
  if not drop_undeclared and plan.blocking_cleanup:
157
162
  click.echo()
158
- click.secho("Undeclared constraints still in database:", fg="red", bold=True)
163
+ click.secho(" Undeclared constraints still in database:", fg="red", bold=True)
159
164
  for item in plan.blocking_cleanup:
160
- click.secho(f" {item.describe()}", fg="red")
161
- click.secho("Rerun with --drop-undeclared to remove them.", fg="red")
165
+ click.secho(f" {item.describe()}", fg="red")
166
+ click.secho(" Rerun with --drop-undeclared to remove them.", fg="red")
162
167
  success = False
163
168
 
164
169
  if not drop_undeclared and plan.optional_cleanup:
165
170
  click.echo()
166
171
  for item in plan.optional_cleanup:
167
- click.echo(f" {item.describe()}")
168
- click.echo("Run with --drop-undeclared to remove undeclared indexes.")
172
+ click.echo(f" {item.describe()}")
173
+ click.echo(" Run with --drop-undeclared to remove undeclared indexes.")
169
174
 
170
175
  if not success:
171
176
  sys.exit(1)
172
177
  elif not items:
173
- click.secho("Schema is converged.", fg="green")
178
+ click.echo(" Schema is converged.")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain.postgres"
3
- version = "0.91.0"
3
+ version = "0.91.1"
4
4
  description = "Model your data and store it in a database."
5
5
  authors = [{ name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev" }]
6
6
  readme = "README.md"
File without changes