|
|
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
Можно делать так? Код: plsql 1. 2. 3. 4. 5. 6. 7. ctidThe physical location of the row version within its table. Note that although the ctid can be used to locate the row version very quickly, a row's ctid will change if it is updated or moved by VACUUM FULL. Therefore ctid is useless as a long-term row identifier. The OID, or even better a user-defined serial number, should be used to identify logical rows.Здравый смысл подсказывает добавь поле сериал в таблицу и используй его в WHERE. Другими словами вопрос работая в транзакции можно использовать ctid строки для однократного обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 13:38:25 |
|
||
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
SmeL_mdМожно делать так? Код: plsql 1. 2. 3. 4. 5. 6. 7. ctidThe physical location of the row version within its table. Note that although the ctid can be used to locate the row version very quickly, a row's ctid will change if it is updated or moved by VACUUM FULL. Therefore ctid is useless as a long-term row identifier. The OID, or even better a user-defined serial number, should be used to identify logical rows.Здравый смысл подсказывает добавь поле сериал в таблицу и используй его в WHERE. Другими словами вопрос работая в транзакции можно использовать ctid строки для однократного обновления. нет так делать нельзя и не надо... если между query = 'SELECT ctid FROM my_table'; и EXECUTE 'UPDATE my_table SET field = $1 WHERE ctid = $2' USING 'bla bla',r.ctid; кто то сделает update этой самой записи ctid у нее изменится (в части случаев). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 13:48:30 |
|
||
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
Maxim BogukSmeL_mdМожно делать так? Код: plsql 1. 2. 3. 4. 5. 6. 7. пропущено... Здравый смысл подсказывает добавь поле сериал в таблицу и используй его в WHERE. Другими словами вопрос работая в транзакции можно использовать ctid строки для однократного обновления. нет так делать нельзя и не надо... если между query = 'SELECT ctid FROM my_table >>>FOR UPDATE<<<'; и EXECUTE 'UPDATE my_table SET field = $1 WHERE ctid = $2' USING 'bla bla',r.ctid; кто то сделает update этой самой записи ctid у нее изменится (в части случаев).а вот так -- должен обломаться. // может быть автор именно этого и хочет -- запускает в параллель 10-к апдейтящих жобов, и не хочет ,чтобы они параллелились. а адвайзори-локами заморчиваться нет желания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:41:40 |
|
||
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
SmeL_md, в транзакции можно использовать ctid строки для однократного обновления такие желания говорят, что не туда всё пошло в развитии системы. зачем вам "однократное обновление"? что вы хотите сделать с данными? у вас проблема с ключами? ctid вам еще и вакуум может поменять. -- http://www.postgresql.org/docs/9.3/static/plpgsql-cursors.html 40.7.3.3. UPDATE/DELETE WHERE CURRENT OF вот сюда еще гляньте и "and it's best to use FOR UPDATE in the cursor" хотя, оч вероятно (но в код лезть лень смотреть), оно внутри по ctid и работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 21:48:21 |
|
||
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinзачем вам "однократное обновление"? что вы хотите сделать с данными? у вас проблема с ключами?Все очень просто, "захотели" чуть поменять условия игры во время игры. Т.е. изначально хватало констрэйнов для идентификации строки во время апдэйта, но теперь эти значения опциональны. Услугами ctid так и не воспользовался. Но возник вопрос можно ли использовать ctid, с оговоркой что все это происходит в одной транзакции выборка строк и их ctid и выбранные строки будут обновляться только один раз в рамках данной транзакции. Коль начали про ctid я думаю возможна ситуация когда ctid для определенной строки со временем станет актуальный для другой, или предположение не верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:13:18 |
|
||
|
UPDATE ... WHERE ctid = $1
|
|||
|---|---|---|---|
|
#18+
SmeL_md, a row's ctid will change if it is updated вам тогда надо select for share хотя бы. но с вакуумом надо уточнять, но оч подозреваю, что он их не подвинет, если вы их "взяли" уже. удаление дубликатов через ctid http://blog.2ndquadrant.com/using_the_postgresql_system_co/ http://www.postgresonline.com/journal/archives/22-Deleting-Duplicate-Records-in-a-Table.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 22:27:54 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=121&tid=1998407]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 378ms |

| 0 / 0 |
