No project description provided
Project description
sqlalchemy-pglogical
sqlalchemy-pglogical is a sqlalchemy extension to automatically send DDL through
pglogical.replicate_ddl_command
Who's this for?
sqlalchemy-pglogical may be for you if:
- you use
sqlalchemyand/oralembicfor DDL, and - you use
pglogicalfor logical replication
How do I use it?
There are two keys to using sqlalchemy-pglogical:
import sqlalchemy_pglogical- because of the way extendingsqlalchemyworks, you can do this in pretty much any file that is loaded before DDL is called- Explicitly define your schema. If you're using
sqlalchemy's declaritive syntax, you define your schema by adding__table_args__to each table:Base = declarative_base() class User(Base): __tablename__ = "users" __table_args__ = {"schema": "public"}
if you're usingsqlalchemycore and usingMetaDatato define your tables, addschemaas a keyword arg to yourMetaDatainitialization:metadata = Metadata(schema="public")
It probably makes the most sense to import it wherever you create your engine
to be sure it's always applied. For most apps, this is probably most important
for your migration toolchain (e.g. alembic), and less likely to be needed
for your running application. If you're relying on alembic to build your
sqlalchemy.engine (e.g, it's only defined in your alembic.ini), then you
should probably add this to your migration mako template.
from sqlalchemy import create_engine
import sqlalchemy_pglogical
Known limitations
Only one publication
We currently assume you're using the default_ddl publication and only publish to that publication.
CREATE INDEX CONCURRENTLY
pglogical can't propagate {CREATE, DROP} INDEX CONCURRENTLY statements. sqlachemy-pglogical makes
no attempt to catch the CONCURRENTLY keyword in INDEX statements, so they will likely fail.
How does it work?
DDL operations are represented in SQLAlchemy 1.x with a subclass of DDLElement. To
extend a DDL type, you can do this:
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.ddl import CreateTable
@compiles(CreateTable)
def visit_create_table(element, compiler, **kwargs) -> str:
normal_ddl_sql: str = compiler.visit_create_table(element, **kwargs)
modified: str = some_modification_we_define_elsewhere(normal_ddl_sql)
return modified
We use this to extend all subclasses of DDLElement and wrap them in pglogical.replicate_ddl_command
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sqlalchemy_pglogical-0.1.0.tar.gz.
File metadata
- Download URL: sqlalchemy_pglogical-0.1.0.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0efbe01ee0b85fc95109debdc345566370c9fc8932b9f89dc04b83b121780ae0
|
|
| MD5 |
17c831edbcfc6ffd09d617a1efe9a554
|
|
| BLAKE2b-256 |
34e666c5f0269d850e3d13aabd7b86ab32a522ab6c26d0b020c0052569791a2c
|
File details
Details for the file sqlalchemy_pglogical-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sqlalchemy_pglogical-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f936a314119d5481d40cff08602bf00cf230e6b05f97f7b53701eae6e9970f04
|
|
| MD5 |
b5bd3362d89d002dadb4251f79921bad
|
|
| BLAKE2b-256 |
e05032e67a71b3d247a38a135da6fc9650c1f5b73492e4284656c917dc0e3f10
|