Я новичок в PostgreSQL и хотел бы узнать о возможных передовых методах и о том, возможно ли вообще автоматически создавать и заполнять таблицы в одной схеме на основе таблиц, представленных в другой схеме , возможно, используя триггеры и функции. Моя причина для этого заключается в том, что мне сказали, что предпочтительнее выполнять вычисления в базе данных, чем извлекать данные, выполнять вычисления и вставлять их снова. Я должен упомянуть, что я могу сделать последнее в python , используя psycopg2 .
Я понимаю, что триггеры и функции могут использоваться для автоматического заполнения столбцов на основе других столбцов в той же таблице, но я еще не смог создать код, который делает то, что мне нужно, поэтому я ищу здесь помощь и подсказки. Чтобы прояснить свой вопрос, я хотел бы описать, как сейчас выглядит моя база данных:
Схема с именем raw_data
, заполненная произвольным и увеличивающимся числом таблиц, связанных с измерениями, выполненными в разных местах:
area1 (timestamp, value)
area2 (timestamp, value)
area3 (timestamp, value)
- ...
Каждая таблица состоит из двух столбцов timestamp
и value
. Новые данные постоянно добавляются в каждую таблицу. Таблица создается с использованием следующего кода на Python с использованием psycopg2 с активным подключением con
к базе данных:
table_name = schema_name + '.' + table_name.lower()
sql = ('CREATE TABLE ' + table_name + ' ('
'timestamp varchar (19) PRIMARY KEY, '
'value numeric (5,2) NOT NULL, '
');')
try:
cur = con.cursor()
cur.execute(sql)
con.commit()
except psycopog2.Error as e:
con.rollback()
print(e)
finally:
cur.close()
Моя цель - провести «живой» (выполняется, как только новые значения вставляются в таблицу в схеме raw_data
) анализ (вычисления) данных, которые доступны в каждой таблице в raw_data
схемы, но я также заинтересован в том, чтобы не изменять таблицы в raw_data
, так как позже я планирую выполнить несколько «живых» анализов с помощью разных методов, все на основе данных в таблицах в raw_data
. Поэтому я хотел бы создать схему (названную method1
), которая автоматически генерирует таблицы внутри себя на основе таблиц, присутствующих в схеме raw_data
.
Если возможно, я бы также хотел, чтобы новые таблицы заполнялись указанным количеством строк из столбца (timestamp)
, а также значениями, которые были вычислены из столбца (value)
в raw_data
стол.
Возможно ли это вообще, или следует придерживаться извлечения данных, выполнения вычислений и повторной вставки с использованием python и psycopg2?
Я хотел бы заранее извиниться, если я не понимаю, как я использую технические термины, поскольку я не проходил формального обучения SQL или Python.
Спасибо, что нашли время прочитать мой вопрос!
1 ответ
Вы можете создать новую таблицу, используя:
https://www.postgresql.org/docs/current/sql-createtableas.html
Общий пример ниже:
CREATE TABLE AS
another_schema.new_table
SELECT ... FROM
some_schema.existing_table
WHERE
specify conditions
LIMIT
14400
Не уверен, применимо ли здесь, но есть метод SAMPLING для извлечения данных:
https://www.postgresql.org/docs/current/sql-select.html
TABLESAMPLE sampling_method (аргумент [, ...]) [REPEATABLE (seed)]
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.