List[str] parameter treated as text instead of text[] in certain requests
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Execute as duas reproduções de try_it() com asyncpg 0.27.0 e PostgreSQL 15.1, comparando-as com os casts explícitos ::text[]. Rastreie como os parâmetros List são inferidos e codificados para as consultas VALUES e unnest. A tarefa estará concluída quando ambos os exemplos tratarem a lista como text[] sem exigir casts SQL, com cobertura de regressão para os casos relatados.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
- asyncpg version: 0.27.0
- PostgreSQL version: 15.1
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?: No - Python version: 3.8.10
- Platform: Ubuntu
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
- If you built asyncpg locally, which version of Cython did you use?:
- Can the issue be reproduced under both asyncio and
uvloop?: Yes
I'm working with a custom bulk operations API built on top of SQLAlchemy and asyncpg, and some scenarios the List parameters are not treated as postgres arrays.
Example 1:
import asyncio
import asyncpg
async def try_it(table: str, query: str, *params, **connargs):
conn = await asyncpg.connect(**connargs)
try:
await conn.execute(f'CREATE TABLE test_table({table});')
await conn.execute(query, *params)
finally:
await conn.execute('DROP TABLE test_table;')
await conn.close()
table = 'a text[], b text'
query = """
UPDATE test_table SET a = uvals.a
FROM (VALUES ($1, $2)) AS uvals (a, b)
WHERE test_table.b = uvals.b
"""
params = [ ['hello', 'world'], 'helloworld']
db_conn_params = {}
asyncio.get_event_loop().run_until_complete(try_it(table, query, *params, **db_conn_params))
Response:
asyncpg.exceptions.DatatypeMismatchError: column "a" is of type text[] but expression is of type text
Example 2:
# same imports and try_it() from above
table = 'a text, b int'
query = """
SELECT a, b
FROM test_table
UNION
SELECT
values as a,
5 as b
FROM unnest($1) as values
"""
params = [ ['hello', 'world'] ]
# execution as above
Response:
asyncpg.exceptions.AmbiguousFunctionError: function unnest(unknown) is not unique
Adding a $1 :: text[] solves the problem in each case, since it appears to be passing the list as text but there are scenarios where I don't have direct control of the SQL (it being auto-generated).
- Linguagem predominante
- Python
- Estrelas
- 8.1k
- Forks
- 474
- Merge médio
- 1d 17h
- PRs com merge (30d)
- 24
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de MagicStack/asyncpg
-
Failed BEGIN leaves Connection._top_xact set; every later transaction becomes a SAVEPOINT and fails with NoActiveSQLTransactionErrorTalvez já em andamento @devtechedge assumiu há 2 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 35/100
MagicStack/asyncpg#1386 ·
Mantenedores costumam responder em até 1 dia
-
Connect call failed error doesn't distinguish port mismatch from "server not running"Talvez já em andamento @aryansk assumiu há 55 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 72/100
MagicStack/asyncpg#1342 ·
Mantenedores costumam responder em até 1 dia
-
TypeError in asyncpg.connect() for specific parameters when values are not str enoughTalvez já em andamento @pranjalm37 assumiu há 58 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 56/100
MagicStack/asyncpg#1340 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
setup.py relies on deprecated pkg_resourcesTalvez já em andamento @jasonwbarnett assumiu há 86 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 28/100
MagicStack/asyncpg#1337 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 42/100
MagicStack/asyncpg#1330 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de MagicStack/asyncpg
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
aicell-lab/bioengine#232 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
modelscope/evalscope#1836 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
jbaruch/speaker-toolkit#480 ·
Mantenedores costumam responder em até 1 dia