powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблички в ХП
6 сообщений из 6, страница 1 из 1
Временные таблички в ХП
    #32718234
mem_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги!
Пожалуйста подскажите как правильно использовать временные таблички в ХП.
А то вообще зарылся что-то.
create or replace function test() returns setof integer as
'
declare sql text;
declare r record;
begin
execute ''create temporary table tt(id integer);'';
perform ''insert into tt values (1);'';
for r in execute \'select id from tt\' loop
return next r.id;
end loop;
execute ''drop table tt'';
return;
end;
'
language plpgsql;


select * from test();
**
ERROR: relation "tt" already exists
CONTEXT: PL/pgSQL function "test" line 4 at execute statement
...
Рейтинг: 0 / 0
Временные таблички в ХП
    #32718401
PJD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PJD
Гость
Код: plaintext
1.
2.
3.
  if 'tt'::regclass is not null then
    execute 'drop table tt';
  end if;
в самом начале функции или дропни её в конце функции
...
Рейтинг: 0 / 0
Временные таблички в ХП
    #32718428
PJD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PJD
Гость
Заврался, эта проверка на существование таблицы не работает и drop у тебя есть.
Код: plaintext
1.
2.
3.
  if exists(select * from pg_tables where tablename='tt' and tableowner=user) then
    execute 'drop table tt';
  end if;
...
Рейтинг: 0 / 0
Временные таблички в ХП
    #32718655
mem_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за отклик!
А каким образом она может быть, если я ее создаю как временную?
...
Рейтинг: 0 / 0
Временные таблички в ХП
    #32718774
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В справке на селект предусмотрено:

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]

где

TEMPORARY or TEMP
If specified, the table is created as a temporary table. Temporary tables are automatically dropped at the end of a session, or optionally at the end of the current transaction (see ON COMMIT below). Existing permanent tables with the same name are not visible to the current session while the temporary table exists, unless they are referenced with schema-qualified names.


ON COMMIT
The behavior of temporary tables at the end of a transaction block can be controlled using ON COMMIT. The three options are:



PRESERVE ROWS
No special action is taken at the ends of transactions. This is the default behavior.

DELETE ROWS
All rows in the temporary table will be deleted at the end of each transaction block. Essentially, an automatic TRUNCATE is done at each commit.

DROP
The temporary table will be dropped at the end of the current transaction block.


но вот ON COMMIT у меня (работаю из под pgAdmin) вызывает ошибку. В результате (без ON COMMIT), если не отсоединяться, и не дропать таблицу - она остается в отдельной схеме pg_temp_i где i -цифирька. И данные в ей тоже.
...
Рейтинг: 0 / 0
Временные таблички в ХП
    #32840399
Воскрешу темку

у меня пострес при вызове процедуры пишет

Код: plaintext
1.
2.
ERROR:  relation with OID  15769671  does not exist
CONTEXT:  PL/pgSQL function "prc_test" line  33  at if

подскажите пожалуста как с этим бороться

пробовал выше описанными методами - не работает.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблички в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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