|
|
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые друзья. Имеются несколько связанных внешними ключами таблиц. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. и Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. поле meta_data первой таблицы связано со значение id второй таблицы. Можео ли сделать так чтоб поле meta_data автоматически заполнялось при появлении записи в поле id. Гуглил по теме, ничего не нашел для Postgresql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:45:44 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман Алимурадов, а расскажите пжалста, что вы пытаетесь сделать: вставить во вью [джойна] (триггер/руле)? http://www.sql.ru/forum/actualsearch.aspx?search=view foreign key insert&sin=0&bid=7&a=&ma=0&dt=-1&s=1&so=1 вставить и туда и сюда хранимкой ? что-то ещё ? т.к. обычный инсерт в обычную таблу никаких проблем не вызывает. как и 2 последовательных - в разные. начала в мастер, потом - в слейв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:52:44 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман АлимурадовМожео ли сделать так чтоб поле meta_data автоматически заполнялось при появлении записи в поле id.А каким значением? Если константой, то Код: plsql 1. Иначе делать хранимой процедурой. p.s. Раз meta_data.id у вас типа bigserial, то вообще наверно логично, чтобы data.meta_data было bigint? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 13:58:10 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Тригернуя функция будет иметь следующий вид? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Отмечу что s_ep_mkd является таблицей на которую ссылается второй внешний ключ из таблицы data. Также хотелось бы отметить? Тригер надо делать типа AFTER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:17:26 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Dim666Нариман АлимурадовМожео ли сделать так чтоб поле meta_data автоматически заполнялось при появлении записи в поле id.А каким значением? Если константой, то Код: plsql 1. Иначе делать хранимой процедурой. p.s. Раз meta_data.id у вас типа bigserial, то вообще наверно логично, чтобы data.meta_data было bigint? Можео ли сделать так чтоб поле meta_data автоматически заполнялось при появлении записи в поле id из таблицы meta_data . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:19:23 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман АлимурадовТригернуя функция будет иметь следующий вид? <>о каком триггере идёт речь ? вы уж как-нибудь определитесь. если речь о триггере на вью, и все три таблицы в нём (вью) представленны - то вполне вероятно и некоторое текстуальное совпадение с вашим вариантом. но отнюдт не полным, так как вместо бреда в виде NEW.meta_data:=meta_data.id; NEW.s_ep_mkd:=s_ep_mkd.id; вам понадобится что-то другое. например, если эти поля представленны в неназываемом вам (но подразумеваемом) вью, и называются как-то наподобие meta_data_id и s_ep_mkd_id, то текст бцудет примерно таков: NEW.meta_data:=NEW.meta_data_id; NEW.s_ep_mkd:=NEW.s_ep_mkd_id; если же вы бредите совсем не об триггере на вставку в некий "обновляемый" вью, а о чём-то своём, о девичьем - то вот с этого и стоит начать -- что именно вы предполагаете заполнять значениями, в какой увязке с заполнением прочих таблиц ? Нариман Алимурадов Тригер надо делать типа AFTER? какой смысл определять значения полей вью в триггере AFTER ? или вы не представляете чем after триггер отличается от BEFORE ? вообще-то желательно сначала разогнать своих тараканов, т.е. поставить полностью задачу - а потом уточнять детали а не наоборот - упрашивать сторонних людей прояснять девственный туман в вашей бестолковке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:39:20 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман Алимурадов <> Можео ли сделать так чтоб поле meta_data автоматически заполнялось при появлении записи в поле id из таблицы meta_data . можно перестать бредить ? запись появляется не "в поле" а "в таблице" целиком. как вариант - "во вью", как псевдо-таблице. и в каком порядке вы хотите порождать запись в подчиненке при появлении записи в мастере ? чем должны заполняться прочие [ кроме id == fk] поля подчиненки в момент вставки чего-бы то ни было в мастер? если вы конопатите связь 1:1 то не проще ли сделать все полями одной таблицы, по крайней мере, пока у вас в голове не прояснеет на счёт синтакса там и прочих чисто технических моментов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 15:45:01 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
автор]о каком триггере идёт речь ? вы уж как-нибудь определитесь. тригер на обновление связанных полей таблицы data из соответствующих внешних ключей. авторесли же вы бредите совсем не об триггере на вставку в некий "обновляемый" вью, а о чём-то своём, о девичьем - то вот с этого и стоит начать -- что именно вы предполагаете заполнять значениями, в какой увязке с заполнением прочих таблиц ? то есть я добавляю записи в таблицу meta_data, при этом чтоб в связанной таблице data автоматически заполнялись поля на которые прописаны вшешние ключи. В моем случае поле meta_data/ авторкакой смысл определять значения полей вью в триггере AFTER ? или вы не представляете чем after триггер отличается от BEFORE ? При добавлении записи в meta_data.id, обноление поля data.id не будет производиться так как нарушается правило внешенего ключа, согласно которому значение выбирается из FOREIGN KEY, а оно у нас на момент вставки пустое. P.S Не ругайте вы сильно( я только азы постигаю. Вопрос сформулировать даже с трудом получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 16:04:49 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
давайте по полочкам:Нариман Алимурадовавтор]о каком триггере идёт речь ? вы уж как-нибудь определитесь. тригер на обновление связанных полей таблицы data из соответствующих внешних ключей. т.е. кто на ком стоял ? ключ - это ссылка, не из каких ссылок ничего не триггерится. триггер - это обработчик события изменения или вставки записи (а не поля) в таблицу итак, про обработку какого события, в какой таблице, вы хотите вести речь ? Нариман Алимурадовавторесли же вы бредите совсем не об триггере на вставку в некий "обновляемый" вью, а о чём-то своём, о девичьем - то вот с этого и стоит начать -- что именно вы предполагаете заполнять значениями, в какой увязке с заполнением прочих таблиц ? то есть я добавляю записи в таблицу meta_data, при этом чтоб в связанной таблице data автоматически заполнялись поля на которые прописаны вшешние ключи. В моем случае поле meta_data если вы добавляете "много записей" и хотите породить (на это событие вставки "много записей") одну запись где-то ещё - это не описывается соотношением типа мастер-слейв. (обслуживаемые ссылкой типа фк) если вы хотите при вставке любой записи в мастер производить вставку новой записи в слейв (т.е. реализовать 1:1) то самое простое - добавить поля слейва в мастер, и не заморочиваться триггерами. но можно и триггером, и даже after. Только закавыка в том, что NEW это поля обновляемой/создаваемой записи. Т.е. в вашем случае мастер-таблицы. А не подчиненки, которую вы хотите автоматом создать. ну, а как узнать , какую запись (id) третьей таблицы вы хотите назначить в соотвествие с только что порождаемой вами (в триггере на первую ) запись второй -- это вообще уму не растяжимо. Нариман Алимурадовавторкакой смысл определять значения полей вью в триггере AFTER ? или вы не представляете чем after триггер отличается от BEFORE ? При добавлении записи в meta_data.id, обноление поля data.id не будет производиться так как нарушается правило внешенего ключа, согласно которому значение выбирается из FOREIGN KEY, а оно у нас на момент вставки пустое. P.S Не ругайте вы сильно( я только азы постигаю. Вопрос сформулировать даже с трудом получается. ещё раз. запись добавляется не в (поле) "дата"."ид", а в (таблицу) "дата" целиком. говорить о добавление записи в поле - недопустимо. о каом "обновлении" вы говорите в процессе добавления - я не понимаю попытайтесь донести свою мысль более подробно если же вас заботит добавление синхронно записи в слейв с ещё не закомиченным значением id из мастера - сделайте отложенную проверку констрейтов. для ФК её сделали давно. см сабкляузы Код: plaintext тут: http://www.postgresql.org/docs/current/static/sql-createtable.html и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 16:35:51 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман Алимурадов, делайте два запроса из клиентского приложения. на каком языке программируете? INSERT INTO meta_data( year, month,.. doc_type, vers_form ) VALUES ( $1, $2,.. $7, $8 ) RETURNING id; INSERT INTO data( meta_data, s_ep_mkd ) VALUES ( $1, $2 ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 17:04:12 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
клиентское приложение . На питоне буду писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 15:52:55 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
клиентское приложение QGIS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 15:54:01 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Нариман АлимурадовНа питоне буду писать.ну и прекрасно. с помощью какого модуля работаете с БД? Нариман АлимурадовПри добавлении записи в meta_data.id, обноление поля data.id не будет производиться так как нарушается правило внешенего ключа, согласно которому значение выбирается из FOREIGN KEY, а оно у нас на момент вставки пустое.поэтому сначала добавляйте запись в таблицу meta_data, и только потом - в data. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 17:12:37 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatНариман АлимурадовНа питоне буду писать.ну и прекрасно. с помощью какого модуля работаете с БД? Нариман АлимурадовПри добавлении записи в meta_data.id, обноление поля data.id не будет производиться так как нарушается правило внешенего ключа, согласно которому значение выбирается из FOREIGN KEY, а оно у нас на момент вставки пустое.поэтому сначала добавляйте запись в таблицу meta_data, и только потом - в data. вообще то всё и так номано работает. Код: sql 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. в чём у ТС проблема - так это с незнанием скуля. и с недодумыванием задач до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 13:38:37 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
qwwqв чём у ТС проблема - так это с незнанием скуля. и с недодумыванием задач до конца.если работать из ЯП через ORM, то знание sql и не требуется. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 14:33:46 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
авторORM, то знание sql и не требуется. :) а вот это, к сожалению, утопия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 14:37:22 |
|
||
|
Автозаполнение связанных полей Postgresql.
|
|||
|---|---|---|---|
|
#18+
Misha TyurinавторORM, то знание sql и не требуется. :) а вот это, к сожалению, утопияда, конечно. и более того, при наличии нагрузки прходится пинать ORM, чтобы генерил эффективные sql запросы. я имел в виду, что в случае не нагруженного проекта можно обойтись ORM и не задумываться об sql и эффективности. PS: приходили начинающие програмеры на собеседование - с БД работал, django знаю, sql - нет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 15:20:08 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38524538&tid=1998895]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
221ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 519ms |

| 0 / 0 |
