相关疑难解决方法(0)

检查Postgres数组中是否存在值

我需要一种方法来测试给定数组中是否存在值.到目前为止,我想出了类似的东西

select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)
Run Code Online (Sandbox Code Playgroud)

但我一直认为应该有一个更简单的方法,我只是看不到它.

编辑:刚认识到我能做到这一点

select '{1,2,3}'::int[] @> ARRAY[value_variable::int]
Run Code Online (Sandbox Code Playgroud)

这要好得多,我相信这已经足够了,但如果你有其他方法可以做,请分享.

arrays postgresql postgresql-9.0

169
推荐指数
6
解决办法
20万
查看次数

检查"空值或空值"的最佳方法

在Postgres sql语句中检查value是null还是空字符串的最佳方法是什么?

值可以是长表达式,因此最好只检查一次.

目前我正在使用:

coalesce( trim(stringexpression),'')=''
Run Code Online (Sandbox Code Playgroud)

但它看起来有点难看.

stringexpression可以是char(n)包含char(n)具有尾随空格的列的列或表达式.

最好的方法是什么?

sql database postgresql null coalesce

149
推荐指数
5
解决办法
18万
查看次数

PostgreSQL可以索引数组列吗?

我在文档中找不到这个问题的明确答案.如果列是数组类型,是否会对所有输入的值进行单独索引?

我创建了一个包含一int[]列的简单表,并在其上放置了一个唯一索引.我注意到我无法添加相同的整数数组,这使我相信索引是数组项的组合,而不是每个项的索引.

INSERT INTO "Test"."Test" VALUES ('{10, 15, 20}');
INSERT INTO "Test"."Test" VALUES ('{10, 20, 30}');

SELECT * FROM "Test"."Test" WHERE 20 = ANY ("Column1");
Run Code Online (Sandbox Code Playgroud)

索引是否有助于此查询?

arrays postgresql indexing

132
推荐指数
3
解决办法
7万
查看次数

node-postgres:如何执行"WHERE col IN(<动态值列表>)"查询?

我正在尝试执行这样的查询:

SELECT * FROM table WHERE id IN (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

问题是我要过滤的ID列表不是常量,每次执行时都需要不同.我还需要逃避id,因为它们可能来自不受信任的来源,尽管我实际上会逃避查询中的任何内容,无论源的可信度如何.

节点的Postgres似乎与绑定参数专门工作:client.query('SELECT * FROM table WHERE id = $1', [ id ]); 如果我有一个已知数量的值(client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])),但是不能直接使用数组,这将有效:client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])因为似乎没有任何特殊的数组参数处理.

根据数组中项目的数量动态构建查询模板,并将ids数组扩展到查询参数数组(在我的实际情况下,除了id列表之外还包含其他参数)似乎是不合理的负担.在查询模板中对id列表进行硬编码似乎也不可行,因为node-postgres不提供任何值转义方法.

这似乎是一个非常常见的用例,所以我的猜测是我实际上忽略了某些东西,而不是不可能将常见的IN (values)SQL运算符与node-postgres一起使用.

如果有人以比我上面列出的方式更优雅的方式解决了这个问题,或者如果我真的错过了关于node-postgres的内容,请帮忙.

node.js node-postgres

55
推荐指数
4
解决办法
3万
查看次数

36
推荐指数
5
解决办法
5万
查看次数

postgreSQL - in vs any

我试过了两个

1)smthng = any(从exmplTable中选择id)

2)smthng in(从exmplTable中选择id)

我的数据得到了相同的结果.

这两个表达有什么不同吗?

postgresql operation any sql-in

26
推荐指数
2
解决办法
2万
查看次数

在Postgres中搜索整数数组

有没有其他方法可以integer[]在Postgres 的列中搜索某个值?

我目前安装的Postgres版本并没有让下面的语句:

SELECT * FROM table WHERE values *= 10;
Run Code Online (Sandbox Code Playgroud)

数组示例:

'{11043,10859,10860,10710,10860,10877,10895,11251}'
'{11311,10698,10697,10710,10712,10711,10708}'
Run Code Online (Sandbox Code Playgroud)

该语句应返回数组包含的每一行'10710'.

sql arrays postgresql

17
推荐指数
2
解决办法
2万
查看次数

在Postgres DB中使用大量id的Django查询过滤器

我想将Django中的查询传递给我的PostgreSQL数据库.当我使用大量的id过滤我的查询时,查询非常慢并且最多可达70秒.

在寻找答案,我看到这篇文章解决了我的问题,只需更改ARRAY [ids]IN语句VALUES (id1), (id2), ....

我在pgadmin中使用原始查询测试了解决方案,查询从70s到300ms ......

如何在Django中执行相同的命令(即不使用id数组,而是使用VALUES查询)?

arrays django postgresql parameter-passing

12
推荐指数
2
解决办法
785
查看次数

如何在带有Rails的WHERE子句中使用ANY而不是IN?

我曾经有过如下查询:

MyModel.where(id: ids)
Run Code Online (Sandbox Code Playgroud)

哪个生成sql查询如:

SELECT "my_models".* FROM "my_models"
WHERE  "my_models"."id" IN (1, 28, 7, 8, 12)
Run Code Online (Sandbox Code Playgroud)

现在我想改为使用ANY而不是IN.我创造了这个:

MyModel.where("id = ANY(VALUES(#{ids.join '),('}))"
Run Code Online (Sandbox Code Playgroud)

现在,当我使用空数组时,ids = []我得到以下错误:

MyModel Load (53.0ms)  SELECT "my_models".* FROM "my_models"  WHERE (id = ANY(VALUES()))
ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
Position: 75: SELECT "social_messages".* FROM "social_messages"  WHERE (id = ANY(VALUES()))
    from arjdbc/jdbc/RubyJdbcConnection.java:838:in `execute_query'
Run Code Online (Sandbox Code Playgroud)

sql postgresql activerecord ruby-on-rails-3 ruby-on-rails-4

11
推荐指数
1
解决办法
1万
查看次数

Postgresql IN 与 ANY 运算符在子查询方面的性能差异

我有两个查询执行相同的操作。1

    SELECT *
    FROM "Products_product"
    WHERE ("Products_product"."id" IN
           (SELECT U0."product_id"
            FROM "Products_purchase" U0
            WHERE (U0."state" = 1
                   AND U0."user_id" = 5))
           AND "Products_product"."state" IN (1,
                                              6,
                                              3)
           AND UPPER("Products_product"."title" :: TEXT) LIKE UPPER('%toronto%'))
    ORDER BY "Products_product"."title_index" ASC
    LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

2

SELECT *
FROM "Products_product"
WHERE ("Products_product"."id" = ANY (ARRAY(
       (SELECT U0."product_id"
        FROM "Products_purchase" U0
        WHERE (U0."state" = 1
               AND U0."user_id" = 5))))
       AND "Products_product"."state" IN (1,
                                          6,
                                          3)
       AND UPPER("Products_product"."title" :: TEXT) LIKE UPPER('%toronto%'))
ORDER BY "Products_product"."title_index" ASC
LIMIT 10; …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql set query-planner

5
推荐指数
1
解决办法
1万
查看次数

sql:转换参数$ 1类型:不受支持的类型[] int,in中的一个切片

拥有这个:

somevars := []int{1, 2, 3, 4}
rows, err = db.Query("SELECT c1,c2 FROM table"+tid+" WHERE c1 IN($1,$2,$3,$4);", somevars)
Run Code Online (Sandbox Code Playgroud)

收到:

sql:转换参数$ 1类型:不支持的类型[] int,一个int切片

有什么办法可以使一部分参数与lib / pq一起使用?

postgresql go

3
推荐指数
3
解决办法
5332
查看次数

两个具有 NULL 值的表达式结果之间的差异

我很好奇为什么以下两个表达式有不同的结果——一个NULL和另一个TRUE

postgres=# select array[1,null]=array[1,null];
 ?column? 
----------
 t
(1 row)

postgres=# select (1,null)=(1,null);
 ?column? 
----------
 
(1 row)
Run Code Online (Sandbox Code Playgroud)

这是什么原因呢?在你的回答中,你能否链接到 Postgres 中的文档或一些 SQL 参考,其中说明了与NULL内部值进行比较时行和列表类型的行为?

sql postgresql

3
推荐指数
1
解决办法
107
查看次数

如何匹配复合类型数组中的元素?

假设我们有两个表:

CREATE TABLE element (
    pk1 BIGINT NOT NULL,
    pk2 BIGINT NOT NULL,
    pk3 BIGINT NOT NULL,
    -- other columns ...
    PRIMARY KEY (pk1, pk2, pk3)
);

CREATE TYPE element_pk_t AS (
    pk1 BIGINT,
    pk2 BIGINT,
    pk3 BIGINT
);

CREATE TABLE collection (
    id BIGINT,
    elements element_pk_t[] NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

具有element复合PK。自定义类型element_pk_t注册匹配的复合类型。该collection表包含数组element_pk_t

我想在单个查询中查询表中elementPK 与 selected 中的元素匹配的所有行。collection.elements

我尝试过的:

SELECT * 
FROM element 
WHERE (pk1, pk2, pk3) IN (SELECT unnest(elements) 
                          FROM collection …
Run Code Online (Sandbox Code Playgroud)

sql postgresql rowtype sql-in

2
推荐指数
1
解决办法
1491
查看次数