Можно ли автоматически создавать и заполнять таблицы в одной схеме на основе таблиц, представленных в другой схеме в PostgreSQL? - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в 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 Ответ

0 голосов
/ 20 июня 2020

Вы можете создать новую таблицу, используя:

https://www.postgresql.org/docs/current/sql-createtableas.html

Общий c пример ниже:

CREATE TABLE AS 
   another_schema.new_table 
SELECT ... FROM 
    some_schema.existing_table 
WHERE
    specify conditions
LIMIT
    14400  

Not конечно, если применимо здесь, но есть метод SAMPLING для извлечения данных:

https://www.postgresql.org/docs/current/sql-select.html

TABLESAMPLE sampling_method (аргумент [, ...]) [REPEATABLE ( семя)]

...