一時的な解決策として、同様の問題を解決する必要がありました。 firebaseadminserviceAccountでアプリを初期化しました。次に、サーバーでFirebaseコレクションの変更をリッスンし、新しい値を受け取ったときにPostgreSQLの値を挿入/更新しました。
アプリを管理者として初期化し、Firebaseで変更をリッスンします:
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://yourfirebaseproject.firebaseio.com',
});
const db = admin.database();
db.ref('User').on('value', async (snapshot) => {
insertOrUpdate(User, 'users', snapshot.val());
});
PostgreSQLへのデータの挿入/更新:
const insertOrUpdate = (model, tableName, data) => {
const firstData = data[0] ? data[0] : data;
return model.knex().raw(
knex(tableName).insert(data).toQuery() + ' ON CONFLICT ("id") DO UPDATE SET ' +
Object.keys(firstData).map((field) => `${field}=EXCLUDED.${field}`).join(', ')
);
};