Re: Upsert error "column reference is ambiguous"
От | Tim Starling |
---|---|
Тема | Re: Upsert error "column reference is ambiguous" |
Дата | |
Msg-id | ac2caa5c-9f18-49db-8f6a-91cd1131f36e@wikimedia.org обсуждение исходный текст |
Ответ на | Re: Upsert error "column reference is ambiguous" (Laurenz Albe <laurenz.albe@cybertec.at>) |
Ответы |
Re: Upsert error "column reference is ambiguous"
|
Список | pgsql-general |
On 29/4/25 16:36, Laurenz Albe wrote: > On Tue, 2025-04-29 at 08:36 +1000, Tim Starling wrote: >> My code would be like >> >> function upsert( $table, $names, $values, $key, $set ) { >> if ( $this->type === 'mysql' ) { >> $conflict = 'ON DUPLICATE KEY UPDATE'; >> } else { >> $conflict = "ON CONFLICT ($key) DO UPDATE SET"; >> } >> return $this->query( "INSERT INTO $table ($names) " . >> "VALUES ($values) $conflict $set" ); >> } >> >> The parameters are a little bit more structured than that, but that >> gives you the idea. > > Another litle "if" to cater for PostgreSQL's "EXCLUDED." would be > such a big problem? I don't understand what you mean. EXCLUDED is not needed. "$table." needs to be prefixed to every column reference in the string $set. How do you find the column references amongst the string literals, function calls, etc.? You would need to parse the expression. This is a public interface and there may be callers in code that I don't have access to. Part of the reason for wanting to replace the existing emulation with a native upsert is to simplify the code. Parsing the expression is definitely not a simplification. -- Tim Starling
В списке pgsql-general по дате отправления: