
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
data-pusher
Advanced tools
I am a simple ETL tool.
This ETL assumes the following:
int becomes a bigint, that's OKWith async/await, node is now the best way to program parallel processes which spend most of its time waiting for data. An ETL is largely asking one source for data, doing some simple (read: non-cpu bound) transformation on that data, and then sending it off to another destination. With promise flow control, this again becomes very simple!
Say you want to move all the tables with data newer than X from one database to another. We will be demoing this with a Rails-like database, where an updated_at column can be used to check for new or updated records.
const DataPusher = require('data-pusher')
const connections = {
source: {
type: 'pg',
connectionString: process.env.SOURCE
},
destination: {
type: 'pg',
connectionString: process.env.DESTINATION
}
}
const etl = new DataPusher(connections)
const updateColumns = ['updated_at', 'created_at']
const main = async () => {
await etl.connect()
let promises = []
const tables = await etl.connections.source.listTables()
for (let i in tables) {
promises.push(copyTable(tables[i]))
}
await Promise.all(promises)
await etl.end()
}
const copyTable = async (table) => {
let copyTypeMode = 'full'
let tableUpdateCol
const destinationTables = await etl.connections.destination.listTables()
if (destinationTables.includes(table)) {
const columns = await etl.connections.destination.listColumns(table)
updateColumns.reverse().forEach((updateCol) => {
if (columns.includes(updateCol)) {
copyTypeMode = 'update'
tableUpdateCol = updateCol
}
})
}
if (copyTypeMode === 'full') {
await etl.connections.source.read(table, async (data) => {
await etl.connections.destination.write(table, data)
})
} else {
const latest = await etl.connections.destination.max(table, tableUpdateCol)
await etl.connections.source.read(table, async (data) => {
await etl.connections.destination.write(table, data)
}, latest, tableUpdateCol)
}
}
(async function () { await main() }())
This example can be run with node ./examples/simpleRails.js
Connections must support the following methods:
async connect()async end ()async read('id', handler, ...)async write('id', data, ...)And then any other methods you might want
.
FAQs
A Simple streaming ETL tool
The npm package data-pusher receives a total of 2 weekly downloads. As such, data-pusher popularity was classified as not popular.
We found that data-pusher demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.