powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Найти объекты в табличном пространстве и перенести их в pg_default
10 сообщений из 10, страница 1 из 1
Найти объекты в табличном пространстве и перенести их в pg_default
    #39723335
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Postgresql 9.6.1

Хочу для всех объектов БД сделать табличное пространство по умолчанию: pg_default
Выполняю команду:
Код: plsql
1.
2.
postgres=# alter database mydb SET TABLESPACE = pg_default;
ERROR:  unrecognized configuration parameter "tablespace"


Ищу таблицы и индексы в текущем табличном пространстве:
Код: plsql
1.
2.
mydb=# select * from pg_tables where tablespace='mydb_tab';
(0 rows)


Код: plsql
1.
2.
mydb=# select * from pg_indexes where tablespace='mydb_tab';
(0 rows)


В табличном пространстве есть данные, удалить его не даёт
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mydb-# \db[+]
List of tablespaces
-[ RECORD 1 ]-----+------------------------------------------
Name              | mydb_tab
Owner             | dbuser
Location          | /home/postgres/pgsql/mydb/mydb_tab
Access privileges |
Options           |
Size              | 25 MB
Description       |



Код: plsql
1.
2.
mydb=# drop tablespace mydb_tab;
ERROR:  tablespace "mydb_tab" is not empty



Что это за объекты и как их искать?
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39723341
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select * FROM pg_tablespace;

Код: plsql
1.
2.
3.
4.
5.
-[ RECORD 3 ]---------------
spcname    | mydb_tab
spcowner   | 16384
spcacl     |
spcoptions |



нашёл spcowner. как найти объекты?
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39723358
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,

а owner вам зачем? Это пользователь-владелец tablespace
Код: sql
1.
select * from pg_class where reltablespace = (select oid from pg_tablespace where spcname = 'mydb_tab')


В каждой базе на этом кластере.
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39723366
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,

Сначала определите в каких базах данных кластера используется табл. пространство: функция pg_tablespace_databases.
Затем в каждой такой БД ищите таблицы, индексы, мат. представления.
Также проверьте не используется ли табл. пространство по умолчанию для какой-нибудь БД (\list+).
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39723369
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda
Код: plaintext
1.
postgres=# alter database mydb SET TABLESPACE  =  pg_default;
ERROR:  unrecognized configuration parameter "tablespace"

Знак = лишний
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39732196
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСначала определите в каких базах данных кластера используется табл. пространство: функция pg_tablespace_databases.
Затем в каждой такой БД ищите таблицы, индексы, мат. представления.
Также проверьте не используется ли табл. пространство по умолчанию для какой-нибудь БД (\list+).

У меня только в одной БД используется табличное пространство которое я хочу удалить.
функция pg_tablespace_databases . -она есть в 9.6.1?
покажите пример её использования в 9.6.1

авторЗатем в каждой такой БД ищите таблицы, индексы, мат. представления.
В том то и беда, я не могу их найти...всё по нулям...но где-то хвостик остался...табличное пространство не удаляется.

Код: plsql
1.
alter database mydb SET TABLESPACE pg_default;


пробовал, но получил ошибку, что часть данных в одном табличном пространстве, часть в другом, нужно перевести
их всё в одно...в общем не вышло. + к этому накладываются дополнительные ограничения: с БД никто не должен работать,
иначе сообщение: что есть сессии в текущей БД.

Я полагаю, что моя проблема либо в сиквенсах, либо в мат вью.
Помогите запросом их найти
Спасибо!
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39732205
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkijBigBudda,

а owner вам зачем? Это пользователь-владелец tablespace
Код: sql
1.
select * from pg_class where reltablespace = (select oid from pg_tablespace where spcname = 'mydb_tab')


В каждой базе на этом кластере.

Сделал запрос в каждой БД на этом кластере. результат: 0
При этом табличное пространство не удаляется:

db_new=# drop tablespace mydb_tab;
ERROR: tablespace "mydb_tab" is not empty
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39732322
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,

Можно сгенерировать скрипт переноса таблиц и индексов следующим скриптом :-)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
case when C.relkind <> 'i'
then 'ALTER TABLE '||N.nspname ||'.'||C.relname||' SET TABLESPACE pg_default;
'
else 'ALTER INDEX '||N.nspname ||'.'||C.relname||' SET TABLESPACE pg_default;
'
end
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE  N.nspname NOT IN ('pg_catalog', 'information_schema')
  AND  N.nspname !~ '^pg_toast'
  AND c.reltablespace != 0
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39732432
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DSKaluginBigBudda,

Можно сгенерировать скрипт переноса таблиц и индексов следующим скриптом :-)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
case when C.relkind <> 'i'
then 'ALTER TABLE '||N.nspname ||'.'||C.relname||' SET TABLESPACE pg_default;
'
else 'ALTER INDEX '||N.nspname ||'.'||C.relname||' SET TABLESPACE pg_default;
'
end
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE  N.nspname NOT IN ('pg_catalog', 'information_schema')
  AND  N.nspname !~ '^pg_toast'
  AND c.reltablespace != 0


запрос возвращает 0 строк
...
Рейтинг: 0 / 0
Найти объекты в табличном пространстве и перенести их в pg_default
    #39732473
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBuddaзапрос возвращает 0 строк
закомментируйте последнее ограничение
Код: sql
1.
AND c.reltablespace != 0


этим я отсеивал все таблицы, которые УЖЕ в pg_default
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Найти объекты в табличном пространстве и перенести их в pg_default
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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