powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Извлечение данных из системных таблиц REDSHIFT
5 сообщений из 5, страница 1 из 1
Извлечение данных из системных таблиц REDSHIFT
    #39284593
Sergey-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо извлечь данные из information_schema или pg_table_deff и вставить в другую таблицу для дальнейшего анализа.

CREATE TABLE SOURCE(Tablename VarChar(100), Columns VarChar(100),Type VarChar(100));

INSERT INTO SOURCE (Tablename)
SELECT table_name FROM information_schema.tables

Выдает ошибку:

ERROR: 0A000: Specified types or functions (one per INFO message) not supported on Redshift tables.

При чем сам селект выполняется, а вставку делать не желает.
...
Рейтинг: 0 / 0
Извлечение данных из системных таблиц REDSHIFT
    #39285005
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это потому что данный запрос выполняется на мастер ноде. Простого решения тут к сожалению нет, можно только выгрузить результат в файл внешней утилитой (UNLOAD тоже не сработает) и потом уже загрузить в таблицу.
...
Рейтинг: 0 / 0
Извлечение данных из системных таблиц REDSHIFT
    #39285159
Sergey-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Apex,

Может быть про мастер нод и правда, но я столкнулся, ковыряя глубже системные таблицы, с функцией Format_type(OID, INTEGER). Так вот она возвращает значение в формате TEXT. А формат TEXT не вставляется в таблицу. Таким образом, вставка выборок из системных таблиц, содержащих эту функцию не работает, а из остальных системных таблиц все хорошо. Для моей задачи пришлось искать другие таблицы, содержащие нужную мне информацию.
Может кому и поможет моя подсказка.
Всем спасибо.
...
Рейтинг: 0 / 0
Извлечение данных из системных таблиц REDSHIFT
    #39285259
Sergey-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И я пока не победил эту беду. Может кто знает куда обращается Format_Type и что делает? Можно ли как-то обойтись в тексте не применяя эту функцию?
...
Рейтинг: 0 / 0
Извлечение данных из системных таблиц REDSHIFT
    #39285783
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey-ZZZApex,

Может быть про мастер нод и правда, но я столкнулся, ковыряя глубже системные таблицы, с функцией Format_type(OID, INTEGER). Так вот она возвращает значение в формате TEXT. А формат TEXT не вставляется в таблицу. Таким образом, вставка выборок из системных таблиц, содержащих эту функцию не работает, а из остальных системных таблиц все хорошо. Для моей задачи пришлось искать другие таблицы, содержащие нужную мне информацию.
Может кому и поможет моя подсказка.
Всем спасибо.
"Формат" text тут не при чем, дело в самой функции format_type, она работает только на мастер ноде. Но, чтобы вставить данные, которые она возвращает она должна выполниться на обычных нодах, т.к. там храняться данные.

Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
datamart=# create table test as select 'blah'::text as txt;
SELECT
Time: 3222.078 ms
datamart=# select * from test;
+------+
| txt  |
+------+
| blah |
+------+
(1 row)

Time: 119.068 ms
datamart=# select txt, current_database() from test;
+------+------------------+
| txt  | current_database |
+------+------------------+
| blah | datamart         |
+------+------------------+
(1 row)



Как видно функция current_database() работает в контексте постоянной таблицы. А значит можно ее результат записать в таблицу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
datamart=# create table test2 as select current_database()::text;
SELECT
Time: 3381.336 ms
datamart=# select * from test2;
+------------------+
| current_database |
+------------------+
| datamart         |
+------------------+
(1 row)

Time: 152.441 ms
datamart=# 



Отлично, теперь попробуем тоже самое с current_schema():

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
datamart=# create table test3 as select current_schema()::text;
INFO:  00000: Function "current_schema()" not supported.
LOCATION:  setWhichExecutorColumns, /home/rdsdb/padb/src/pg/src/backend/parser/parser_analyze.c:1537
ERROR:  0A000: Specified types or functions (one per INFO message) not supported on Redshift tables.
LOCATION:  setWhichExecutorColumns, /home/rdsdb/padb/src/pg/src/backend/parser/parser_analyze.c:1541
Time: 114.248 ms

datamart=# select txt, current_schema() from test;
INFO:  00000: Function "current_schema()" not supported.
LOCATION:  setWhichExecutorColumns, /home/rdsdb/padb/src/pg/src/backend/parser/parser_analyze.c:1537
ERROR:  0A000: Specified types or functions (one per INFO message) not supported on Redshift tables.
LOCATION:  setWhichExecutorColumns, /home/rdsdb/padb/src/pg/src/backend/parser/parser_analyze.c:1541
Time: 64.801 ms
datamart=# 



Как видно, создать постоянную таблицу на основе current_schema() нельзя, ровно как и нельзя вызывать эту функцию в контексте запроса из другой постоянной таблицы.

Та же проблема и с Format_type, которая используется в системных вьюхах.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Извлечение данных из системных таблиц REDSHIFT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]