Я хочу создать временную таблицу, чтобы иметь возможность присоединить ее к нескольким таблицам, потому что объединение этих таблиц с содержимым предлагаемой временной таблицы занимает много времени (выборка временной таблицы занимает много времени. Повторение его снова и снова занимает все больше времени). Я удаляю временную таблицу, когда мои потребности будут выполнены. Я хочу знать, будут ли эти временные таблицы видны в течение другого сеанса клиента (мое требование - сделать их видимыми только для текущего сеанса клиента). Я использую postgresql. Было бы здорово, если бы вы предложили лучшие альтернативы решению, о котором я думаю.Являются ли временные таблицы в postgresql видимыми во всех клиентских сеансах?
ответ
Просьбы читают the documentation.
Временные таблицы видны только в текущей сессии и автоматически отбрасываются при завершении сеанса базы данных.
Если вы укажете ON COMMIT
, временная таблица автоматически будет удалена в конце текущей транзакции.
Если вам нужна хорошая статистика таблицы во временной таблице, вы должны явно позвонить ANALYZE
, так как эти статистические данные не собираются автоматически.
Спасибо за ответ Launrenz. Фактически я был в замешательстве относительно того, на что эти сеансы действительно ссылаются. Являются ли эти сеансы БД или сеансами клиентов, так как сеанс БД может охватывать несколько клиентских сеансов, и если таблица видна для всего сеанса БД каждому клиенту (а не клиенту db), то это не полезно для меня. –
Это сеанс базы данных. Если вы используете какой-то пул соединений, вам либо нужно явно удалить временную таблицу, когда вы закончите, либо выполняете свою работу в рамках одной транзакции и используйте «ON COMMIT» с временной таблицей. –
PostgreSQL - это база данных для вас. Временные таблицы выполняются лучше, чем стандарт. Из the docs,
Хотя синтаксис CREATE TABLE ВРЕМЕННЫЙ напоминает стандарт SQL, эффект не то же самое. В стандарте временные таблицы определяются только один раз и автоматически существуют (начиная с пустого содержимого) в каждом сеансе, который им нужен. PostgreSQL вместо этого требует, чтобы каждый сеанс выдавал собственную команду CREATE TEMPORARY TABLE для каждой временной таблицы, которая будет использоваться. Это позволяет различным сеансам использовать одно и то же имя временной таблицы для разных целей,, тогда как подход стандарта ограничивает все экземпляры заданного временного имени таблицы одинаковой структурой таблицы.
Спасибо за ответ Evan. Фактически я был в замешательстве относительно того, на что эти сеансы действительно ссылаются. Эти сеансы БД или сеансы клиентов, так как сеанс БД может охватывать несколько клиентских сеансов, и если таблица видна для всего сеанса БД каждому клиенту (а не клиент db), это мне нехорошо. –
Нет концепции сеансов клиентов. Есть только сеансы базы данных. Это * может быть проблемой на самом деле, если * ваш * клиент объединяет соединения. Это то, что вы принимаете во внимание.База данных не может видеть * вашу * концепцию клиентских сеансов. –
- 1. Являются ли темы видимыми во время разработки?
- 2. Хранить переменную во всех сеансах
- 3. Помогает ли Heroku поддерживать временные таблицы postgresql?
- 4. Являются ли рейтинги магазина приложений видимыми во всем мире?
- 5. Работает ли API SendNotifyMessage во всех сеансах пользователя?
- 6. Являются ли временные таблицы в многопользовательском сервере SQL Server безопасными?
- 7. Ломать временные метки в сеансах, разбивая временные метки
- 8. Являются ли функции PostgreSQL транзакционными?
- 9. Являются ли разделы MySQL видимыми в плане EXPLAIN для SELECT ....?
- 10. Данные в J2ME RecordStore не сохраняются во всех сеансах
- 11. Являются ли временные временные метки обновленными после травления?
- 12. Являются ли частные члены видимыми через частичный класс?
- 13. WebView: как сохранить настройки масштабирования пользователя во всех сеансах?
- 14. Изменить таблицу во всех схемах postgresql
- 15. Являются ли временные функции MSVC потокобезопасными?
- 16. Являются ли временные ключи TempData чувствительными?
- 17. Частая ссылка на переменные приложения во всех сеансах
- 18. VB6: приложение с одним экземпляром во всех сеансах пользователя
- 19. Postgresql: как установить дату во всех строках таблицы?
- 20. java: являются глобальными переменными, видимыми в потоках
- 21. Временные таблицы в Oracle
- 22. Использует ли Oracle временные таблицы во время процедур резервного копирования
- 23. Являются ли теги объектов, установленные JVM, видимыми для агентов JVMTI?
- 24. Вызов delete() в объекте File, являются ли эффекты сразу видимыми?
- 25. динамически инициировать переменную для работы во всех сеансах рабочего процесса
- 26. Полезно ли использовать временные таблицы?
- 27. Как выбрать временные таблицы во временных таблицах
- 28. Learning Makefile: Являются ли правила универсальными во всех реализациях Make?
- 29. удалить временные файлы в postgresql
- 30. Являются ли SystemColors одинаковыми во всех версиях Windows?
у вас есть два хороших ответа, но также иметь в виду, что в postgresql временные таблицы очень редко используются. Всегда есть лучший способ. – e4c5
. Можете ли вы предложить, какой другой подход я могу взять? Я пробовал использовать CTE, но данные в CTE не сохраняются и, следовательно, они не дают значительного повышения производительности (в некоторых случаях, как и у меня, они могут ухудшают производительность). –
Если у вас есть проблемы с производительностью, пожалуйста, прочитайте [postgresql-performance] (http://stackoverflow.com/tags/postgresql-performance/info), затем задайте новый вопрос со всей информацией, указанной в теге info –