SYNTHETIC DEMO DATA
Import pipeline
The catalogue is filled by a command-line importer that reads a Kyero-style XML feed, validates it and upserts it into PostgreSQL. This page shows the most recent runs. It is read-only: imports cannot be triggered from the web.
A scheduled job on a Linux VPS runs the importer daily against a simulated feed in which a few prices change, so new runs show real updates.
Latest run · #6
CompletedOct 27, 2026, 8:39 AM UTC · 4.0 s
- Inserted
- 0
- Updated
- 0
- Unchanged
- 300
- Errors
- 0
Last successful run · #6
CompletedOct 27, 2026, 8:39 AM UTC · 4.0 s
- Inserted
- 0
- Updated
- 0
- Unchanged
- 300
- Errors
- 0
Recent runs
| Run | Started | Duration | Status | Records | Inserted | Updated | Unchanged | Errors | Missing | Deactivated | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| #6 | Oct 27, 2026, 8:39 AM UTC | 4.0 s | Completed | 300 | 0 | 0 | 300 | 0 | 0 | 0 | |
| #5 | Oct 27, 2026, 8:30 AM UTC | 2.9 s | Completed | 300 | 0 | 0 | 300 | 0 | 0 | 0 | |
| #4 | Oct 27, 2026, 8:30 AM UTC | 5.2 s | Completed | 300 | 0 | 300 | 0 | 0 | 0 | 0 | |
| #3 | Oct 27, 2026, 8:15 AM UTC | 0.3 s | Failed | – | 0 | 0 | 0 | 0 | 0 | 0 | MALFORMED_XML: XML is not well-formed: 5230:48: unclosed tag: en |
| #2 | Oct 27, 2026, 8:15 AM UTC | 2.8 s | Completed | 300 | 0 | 0 | 300 | 0 | 0 | 0 | |
| #1 | Oct 27, 2026, 8:15 AM UTC | 4.9 s | Completed | 300 | 300 | 0 | 0 | 0 | 0 | 0 |
How a run works
- Checksum and size limit are checked before anything is parsed.
- The whole feed is streamed and validated before any write; a truncated file fails here and existing data stays untouched.
- Listings are upserted by (source, id) in one transaction. A content hash decides inserted / updated / unchanged, so re-running the same feed changes nothing.
- Kyero feeds are full snapshots, but missing listings are only reported, not removed. Soft deactivation needs an explicit flag and is refused when the record count drops sharply.
- A database advisory lock prevents two runs for the same source at once.