Начало » Использование СУБД » Firebird, HQbird, InterBase » Что такое db_key (и как с ним бороться?)
Что такое db_key [сообщение #3665] |
Tue, 07 November 2023 19:34 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
В разных уголках документаций и статей попадаются упоминания о таком явлении природы, как rdb$db_key, однако места силы, чтобы пришло понимание, найти не могу. Интуитивно эта штука воспринимается как дополнительное необъявленное поле, однако, по всей видимости, это не так.
Думал было использовать, но столкнулся с непонятками.
Создаем и наполняем таблицу
Показать скрытый текст
create table test (
id integer not null
);
alter table test add constraint pk_test primary key (id);
insert into test ( id ) values ( 1 );
Изучаем на предмет rdb$db_key:
SQL> select rdb$db_key, id from test;
DB_KEY ID
================ ============
8000000001000000 1
Пытаемся искать по rdb$db_key:
SQL> select * from test where rdb$db_key = 8000000001000000;
<empty result>
SQL> select * from test where rdb$db_key = '8000000001000000';
<empty result>
И как это понимать?
|
|
|
|
|
Re: Что такое db_key [сообщение #3673 является ответом на сообщение #3665] |
Wed, 08 November 2023 18:37 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
Ага, так работает, спасибо.
Отсюда можно узнать, что rdb$db_key имеет тип varbinary( 8 ), что для впервые столкнувшегося неочевидно. Еще способом догадаться был документ Firebird 4.0.3 Release Notes, раздел про функцию MAKE_DBKEY (авт. Vlad Khorsun).
ИМХО, конструкция rdb$db_key является элементом языка Firebird SQL, и было бы неплохо, если бы она была описана в соответствующей документации. Сама по себе, а не только в примерах к функции MAKE_DBKEY. Кстати, в описании языка тип возвращаемого значения этой функции тоже опущен.
|
|
|
|
|
|
|
Re: Что такое db_key [сообщение #3678 является ответом на сообщение #3673] |
Thu, 09 November 2023 09:43 |
sim_84
Сообщений: 330 Зарегистрирован: June 2022
|
Senior Member |
|
|
Добавить описание системных столбцов RDB$DB_KEY и RDB$RECORD_VERSION таблицы можно, вот только не понятно в какой раздел это поместить.
MAKE_DBKEY возвращает не varbinary( 8 ), а binary( 8 ). Это добавлю.
[Обновления: Thu, 09 November 2023 09:44] Известить модератора
|
|
|
|
|
|
|
Re: Что такое db_key [сообщение #3683 является ответом на сообщение #3678] |
Thu, 09 November 2023 15:23 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
sim_84 писал(а) Thu, 09 November 2023 09:43Добавить описание системных столбцов RDB$DB_KEY и RDB$RECORD_VERSION таблицы можно, вот только не понятно в какой раздел это поместить.
Дык в спецификацию операторов, где они появляются:
SELECT
[...]
[DISTINCT | ALL] <select_list>
[...]
FROM ...
<select_list> ::= * | <output_column> [, <output_column> ...]
<output_column> ::=
<qualifier>.*
| <value_expression> [COLLATE collation] [[AS] alias]
<value-expression> ::=
[<qualifier>.]col_name
| [<qualifier>.]selectable_SP_outparm
| <literal>
| <context-variable>
| <function-call>
| <single-value-subselect>
| <CASE-construct>
| <other-single-value-expr>
| [<qualifier>.]<pseudo_column>
<pseudo_column> ::= rdb$db_key | rdb$record_version
Тут просто необходимо для корректного полного формального описания. ИМХО. Ну и дальше лирический текст с пояснением.
[Обновления: Thu, 09 November 2023 15:31] Известить модератора
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: Что такое db_key [сообщение #3706 является ответом на сообщение #3705] |
Sat, 11 November 2023 22:17 |
hvlad
Сообщений: 357 Зарегистрирован: August 2022
|
Senior Member |
|
|
SD писал(а) Sat, 11 November 2023 14:01"Если что-то ходит как утка..."
Если транзакция каким-то образом получает все качества (область видимости) другой транзакции (за исключением, может быть, номера, хотя ничто не мешает получить и его), она становится той другой транзакцией. И да, переведи мне, пожалуйста
Цитата:to create parallel (via different attachments) processes reading consistent data from a database
может, тут вовсе не говорится о стабильности одних и тех же данных данных в разных подключениях?.. Не нужно кривых аналогий, они очень редко работают.
Если бы было так, как тебе приснилось, то любые изменения в рамках такой "общей" тр-ции должны были бы быть доступны всем её пользователям.
Завершение "общей" тр-ции любым пользователем стало бы сюрпризом для остальных.
Про сейвпойнты я даже говорить не стану.
В приведенной тобой цитате говорится о чтении согласованных данных и ни о чём большем.
Не нужно пустых спекуляций. И кривых аналогий тоже не нужно.
|
|
|
|
|
|
|
|
|
|
Переход к форуму:
Текущее время: Fri Nov 22 06:03:22 GMT+3 2024
Общее время, затраченное на создание страницы: 0.02228 секунд
|