powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dump пользователей
13 сообщений из 13, страница 1 из 1
dump пользователей
    #34213710
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так получилось, что база завязана на OID пользователей.
пользователи создавались путем create user...
теперь при dump/restore возникает проблема с пользователями.
Таблицу pg_user дампить не выходит...

Есть какой то правильный путь dump/restore users with oids?
...
Рейтинг: 0 / 0
dump пользователей
    #34213904
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тогда правильно создавать (чтобы при дампе сохранялись)? Создаю
Код: plaintext
CREATE USER user1 WITH PASSWORD 'passwd' ;
в psql.
...
Рейтинг: 0 / 0
dump пользователей
    #34214194
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pg_dumpall -g
?
...
Рейтинг: 0 / 0
dump пользователей
    #34214268
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори, поспешил, oid'ов там не будет.
а как вы будете создавать пользователя с определенным oid? в доках по create user/role ничего не нашел подходящего кроме
doc
SYSID uid
The SYSID clause is ignored, but is accepted for backwards compatibility.
...
Рейтинг: 0 / 0
dump пользователей
    #34214971
glebofff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом и беда - в отсутствии уникальности OID. Завязываться надо, видимо, на логин.
...
Рейтинг: 0 / 0
dump пользователей
    #34215183
glebofff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот такие ещё проблемы:
http://archives.postgresql.org/pgsql-bugs/2006-09/msg00187.php
...
Рейтинг: 0 / 0
dump пользователей
    #34217387
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) pg_user - не таблица а view вида и просмотрев его исходники можно рискнуть
сделать pg_dump -t pg_authid template1 а затем вкрутить его, но чем это чревато думаю объяснять нет надобности.
Думаю правильнее хотя и дольше - заменить во всех запросах обращение к pg_user на свою таблицу (скажем atsusers), в которую скопировать данные из pg_authid. Oid скопировать в поле скажем ausid и отрихтовать запросы.
3) Насчет "бага" ничего не ясно.... может автор просто забыл написать create table ddd () WITH oiDs; или написал set default_with_oids=false; а потом заорал "баг". По факту сейчас в 8.1.3/4
нормально все дампится и ресторится. Да таже pg_authid замечательно бакапится.
IMHO oid сейчас реально используется не чаще чем скажем пресловутый goto. И привязываться к нему в глобальных вещах непростительно.
4) На _пустом_ кластере при создании пользователей сразуже после initdb можно получить полное совпадение usesysid. Для постгреса думаю везде он равен 10 ну а для первого пользователя созданного руками скороее всего будет 16384. Баг pg_dumpall в том что нужно дампить pg_authid
да и все системные таблицы ( вот это и есть дампить все!!! 8-) ), а не создавать в них объекты с непредсказуемыми oid. Опять таки все это всего IMHO.
...
Рейтинг: 0 / 0
dump пользователей
    #34217455
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А много чего "завязанно" уже? Может сделать отдельно свою таблицу с логинами и своими login_id и завязываться на нее?
...
Рейтинг: 0 / 0
dump пользователей
    #34217593
glebofff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shweik
3) Насчет "бага" ничего не ясно.... может автор просто забыл написать create table ddd () WITH oiDs; или написал set default_with_oids=false; а потом заорал "баг". По факту сейчас в 8.1.3/4
нормально все дампится и ресторится. Да таже pg_authid замечательно бакапится.
IMHO oid сейчас реально используется не чаще чем скажем пресловутый goto. И привязываться к нему в глобальных вещах непростительно.


Речь об OID'ах классов. Вот было бы здорово, если бы они были всегда уникальными. Это просто мечта. :-) Т.е. человек использует идентификаторы для связки каких-то таблиц.

OIDы строк нормально дампятся-ресторятся, да. И то, там есть нюансы.
...
Рейтинг: 0 / 0
dump пользователей
    #34220289
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем переделывать храниение пользователей..
Что то здесь не так с хранением пользователей в постгресе.

А завязались на oid что использовалось
select usesysid from pg_user where usename = (select current_user);
Но своевременно ре разобрались что usesysid есть не что иное как oid :(.
А на тот момент postgresql8.0, позволял явно задавать id пользователя,
в pgadmin была галочка - задать id пользователя.


кстати при pg_dumpall -o (-o with oids) usesysid`ы меняются :(.
...
Рейтинг: 0 / 0
dump пользователей
    #34220623
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КлючниковВ общем переделывать храниение пользователей..
Что то здесь не так с хранением пользователей в постгресе.

А завязались на oid что использовалось
select usesysid from pg_user where usename = (select current_user);
Но своевременно ре разобрались что usesysid есть не что иное как oid :(.
А на тот момент postgresql8.0, позволял явно задавать id пользователя,
в pgadmin была галочка - задать id пользователя.


кстати при pg_dumpall -o (-o with oids) usesysid`ы меняются :(.
вот скриптик на перле, им можно сделать дамп юзеров с usesysid
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
#!/usr/bin/perl -w
 use DBI;
 use strict;

 #Database connection 
 my $dbh=DBI->connect('DBI:Pg:dbname=БД','ЛОГИН','ПАРОЛЬ')
      or
       die "connecting: $DBI::errstr";

 my $sth=$dbh->prepare("select usename, passwd, usecreatedb, usesuper, usesysid from pg_shadow;");
 
 $sth->execute;

 print "\n -- Создание всех пользователей PostgreSql --\n";

 my %users;

 while(my @row=$sth->fetchrow)
  {
   my $nam   = $row[ 0 ];
   my $pas   = $row[ 1 ];
   my $credb = $row[ 2 ];
   my $super = $row[ 3 ];
   $users{$row[ 4 ]} = $row[ 0 ];

   if ($pas) {$pas = qq(WITH PASSWORD '$pas');} 

   if ($credb) {
         $credb = "CREATEDB";}
       else {
         $credb = "NOCREATEDB";}

   if ($super) {
         $super = "CREATEUSER";}
      else {
         $super = "NOCREATEUSER";}
  
   if ($pas) { print qq(CREATE USER $nam $pas $credb $super SYSID $row[ 4 ];\n);}
  }

 $sth=$dbh->prepare("select groname, grolist from pg_group where grolist is not null;");

 $sth->execute;

 print "\n -- Создание всех групп и распределение пользователей --\n";

 while(my @row=$sth->fetchrow)
  {
    my $groname = $row[ 0 ];
    my $grolist = $row[ 1 ];

    $grolist=~s/^\{(.+)\}$/$ 1 /;

    my @grolist=split /,/, $grolist;

    print qq(\nCREATE GROUP $groname;\n);

    foreach (@grolist) {
       my $username = $_;
    if ($username) { print qq( ALTER GROUP $groname ADD USER $users{$username};\n); }
    }
  }
 $dbh->disconnect;
подойдет? )
...
Рейтинг: 0 / 0
dump пользователей
    #34220781
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема отсутствия правильного пути скорее вот в чем :
Код: plaintext
1.
2.
3.
SYSID uid

    The SYSID clause is ignored, but is accepted for backwards compatibility. 

Это из описания Create Role 8-( Так что вышеприведенный скрипт начиная с v 8.1.0 ( Create a new role system that replaces users and groups (Stephen Frost)) не поможет. Кажись поторопились г-да разработчики 8-(( .
Придется сделать в новую базу копию pg_authid (назовем ее скажем old_authid) а затем создав новых пользователей проапдейтить все таблицы основываясь на вьюшке
Код: plaintext
1.
2.
3.
4.
 create view syncoids as  SELECT a0.rolname as oldname,a0.oid as oldoid,a0.rolname as newname,a1.oid as newoid from  old_authid a0, pg_authid a1 where a0.rolname=a1.rolname ;

--- теперь  можно  сделать UPDATE ppps set p1=syncoids.newoid from syncoids where ppps.p1=oldoid;
---  понятно что  все роли должны быть  уже созданы в новой базе иначе ОЙ.

2glebofff
OID-ы неуникальны.... вот это новость 8-[]
всегда был убежден что в пределах базы OID уникален иначе смысл его непонятен.
А как же вот это - деза? Сноска 12.3 :
Код: plaintext
1.
Technically, OID's are unique among all databases sharing a common /data directory tree.
...
Рейтинг: 0 / 0
dump пользователей
    #34221860
glebofff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShweikПроблема отсутствия правильного пути скорее вот в чем :
2glebofff
OID-ы неуникальны.... вот это новость 8-[]


Это не новость! :-)

Если серьёзно, то мне бы хотелось, чтобы при восстановлении БД из дампа восстанавливались и OID'ы таблиц, схем, объектов. Вот я о чём.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dump пользователей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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