Skip to content

Commit 7d7186c

Browse files
feat: Optional msgspec serialization (#687)
1 parent a983fc3 commit 7d7186c

File tree

3 files changed

+66
-9
lines changed

3 files changed

+66
-9
lines changed

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ dependencies = [
3333
"sshtunnel==0.4.0",
3434
"singer-sdk[faker,sql]~=0.50.0",
3535
]
36+
optional-dependencies.msgspec = [
37+
"msgspec>=0.19.0",
38+
]
3639

3740
[project.urls]
3841
Homepage = "https://meltano.com"

tap_postgres/tap.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
if TYPE_CHECKING:
3030
from collections.abc import Mapping, Sequence
3131

32+
# Try to import MsgSpecWriter for better performance
33+
try:
34+
from singer_sdk.contrib.msgspec import MsgSpecWriter
35+
36+
_MSGSPEC_AVAILABLE = True
37+
except ImportError:
38+
_MSGSPEC_AVAILABLE = False
39+
3240

3341
REPLICATION_SLOT_PATTERN = "^(?!pg_)[A-Za-z0-9_]{1,63}$"
3442

@@ -40,6 +48,10 @@ class TapPostgres(SQLTap):
4048
package_name = "meltanolabs-tap-postgres"
4149
default_stream_class = PostgresStream
4250

51+
# Use MsgSpecWriter if available for ~15-20% performance improvement
52+
if _MSGSPEC_AVAILABLE:
53+
message_writer_class = MsgSpecWriter
54+
4355
def __init__(
4456
self,
4557
*args,

uv.lock

Lines changed: 51 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)