Как можно конвертировать данные из формата JSONB в PostgreSQL в таблицу с определенными столбцами?

Как можно создать новую таблицу из передаваемого JSON, так чтобы она содержала поле "id-question", соответствующее значению "идентификатора_вопроса_с_указанием"?
  • 22 февраля 2024 г. 21:28
Ответы на вопрос 2
Для конвертации данных из формата JSONB в PostgreSQL в таблицу с определенными столбцами можно использовать функцию `jsonb_populate_record` в сочетании с оператором `SELECT INTO`.

Например, если у вас есть JSONB данные вида:
```json
{
  "id": 1,
  "question": "How are you?",
  "answer": "I am fine."
}
```

И вы хотите конвертировать их в таблицу с столбцами "id", "question" и "answer", то вы можете сделать это следующим образом:

```sql
CREATE TABLE questions (
  id INT,
  question TEXT,
  answer TEXT
);

INSERT INTO questions
SELECT * FROM JSONB_POPULATE_RECORDSET(NULL::questions, '[{"id": 1, "question": "How are you?", "answer": "I am fine."}]');
```

Чтобы создать новую таблицу из передаваемого JSON с полем "id-question", соответствующим значению "идентификатора_вопроса_с_указанием", можно сделать следующим образом:

```sql
CREATE TABLE question_table AS
SELECT data->>'id' || '-' || data->>'question' AS "id-question"
FROM jsonb_array_elements('[{"id": 1, "question": "How are you?"}, {"id": 2, "question": "What is your name?"}]') AS data;
```

Этот запрос создаст новую таблицу "question_table" с одним столбцом "id-question", который будет содержать значения в формате "идентификатор_вопроса - текст_вопроса".
<blockquote>Как сделать так, чтобы из сохраняемого JSON создать новую таблицу</blockquote> <br/> Такой скрипт не должен создавать новые структуры в СУБД, он должен делать только вставки записей (insert-ы) в заранее подготовленные таблицы на этапе проектирования базы данных. <br/> <blockquote><br/>
id-question: "идентификатор_вопроса_с_указанием_типа"<br/>
answer: "value":&lt;ответ_на_вопрос&gt;<br/>
date: "created":"&lt;дата_ответа&gt;"<br/>
</blockquote> <br/> Вот и создайте эту структуру ручками, create table вам в помощь. <br/> <blockquote>и далее объединить с таблицей, где будут поля</blockquote> <br/> Опять же при вставке данных в базе не должно происходить модификации самой структуры базы. <br/> Вы при выборке данных сопоставляете данные из одной таблицы с другой таблицы при помощи внешних ключей. <br/> Запрос выборки будет иметь конструкцию join: <br/> <pre><code class="sql">select *
 from  Answer A
  join Question Q on Q.id_question = A.id_question -- как раз соединение по ключам
  ...</code></pre> <br/> В общем, учите мат. часть по реляционным СУБД.
Похожие вопросы