approximateRowCount static method

Future<int> approximateRowCount({
  1. required Database database,
  2. required String table,
})

Returns the approximate number of rows in the provided table.

Implementation

static Future<int> approximateRowCount({
  required Database database,
  required String table,
}) async {
  var tableDefinition = await _getLiveTableDefinition(database, table);
  if (tableDefinition == null) {
    throw BulkDataException(
      message: 'The "$table" table was not found in the live database.',
    );
  }

  var query =
      'SELECT reltuples::bigint AS estimate FROM pg_class '
      'JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace '
      'WHERE relname = \'$table\' AND nspname = \'public\'';

  var result = await database.unsafeQuery(query);

  if (result.isEmpty) {
    return 0;
  }
  var count = result.first.first as int;
  return max(count, 0);
}