Предположим, у меня в базе данных PostgreSQL несколько миллионов операторов, и я хочу получить только 10 000 из них. Но не первые 10000, а скорее случайный выбор из 10000 (лучше бы я еще мог выбирать логику, например выбирать каждое 4-е утверждение).
Как это сделать с помощью Prisma или, если это невозможно с помощью Prisma, с помощью старого доброго запроса PostgreSQL?
На данный момент я использую этот код, чтобы ограничить количество результатов, которые я получаю:
const statements = await this.prisma.statement.findMany({
where: {
OR: conditions,
},
orderBy: {
createdAt: 'asc',
},
take: 10000,
});
Это будет использовать условия, которые у меня есть, затем упорядочить их в порядке возрастания и «взять» или ограничить первые 10000 результатов.
Что я мог бы использовать вместо «взять» или какой запрос я мог бы сделать непосредственно в PostgreSQL для случайной выборки записей из моей БД?
На данный момент Prisma изначально не поддерживает выборку случайных данных.
Существует Запрос функции, в котором обсуждается именно тот сценарий, который вам нужен.
Альтернативой может быть использование запросRaw для необработанного доступа к базе данных и использование функции PostgreSQL случайный, как описано в вышеупомянутом запросе функции.
Спасибо, @Nurul. Не могли бы вы рассказать мне, как я использую функцию random
для получения случайных 10000 из всех доступных записей? Из комментария выше мне это было непонятно. Спасибо!
Пожалуйста, посмотрите пост
[this](https://stackoverflow.com/questions/8674718/best-way-to-select-random-rows-postgresql)
.