小编Erw*_*ter的帖子

按IN值列表排序

我在PostgreSQL 8.3中有一个简单的SQL查询,可以获取一堆注释.我在子句中为构造提供了一个值的排序列表:INWHERE

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

这将以任意顺序返回注释,在我碰巧是ids之类的1,2,3,4.

我希望结果行像IN构造中的列表一样排序:(1,3,2,4).
怎么实现呢?

sql postgresql sql-order-by sql-in

146
推荐指数
7
解决办法
9万
查看次数

截断Postgres数据库中的所有表

我经常需要在重建之前删除PostgreSQL数据库中的所有数据.我将如何直接在SQL中执行此操作?

目前我已经设法提出一个SQL语句,它返回我需要执行的所有命令:

SELECT 'TRUNCATE TABLE ' ||  tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
Run Code Online (Sandbox Code Playgroud)

但是,一旦拥有它们,我就无法以编程方式执行它们.

postgresql truncate dynamic-sql plpgsql database-table

142
推荐指数
8
解决办法
13万
查看次数

PostgreSQL列名称区分大小写吗?

我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.

select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)

它只是回归

错误:列"first_Name"不存在

不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?

sql postgresql case-sensitive case-insensitive identifier

138
推荐指数
3
解决办法
9万
查看次数

Postgresql - 更改varchar列的大小

ALTER TABLE对一个非常大的表(大约3000万行)上的命令有疑问.其中一个列是a varchar(255),我想将其调整为a varchar(40).基本上,我想通过运行以下命令来更改我的列:

ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
Run Code Online (Sandbox Code Playgroud)

如果进程很长,我没有问题,但似乎我的表在ALTER TABLE命令期间不再可读.有更聪明的方法吗?也许添加一个新列,从旧列复制值,删除旧列,最后重命名新列?

任何线索将不胜感激!提前致谢,

注意:我使用PostgreSQL 9.0.

postgresql varchar alter-table

136
推荐指数
8
解决办法
21万
查看次数

如何在Postgres SELECT中连接列?

我有两个字符串列ab一个表foo.

select a, b from foo返回值ab.但是,串联ab不起作用.我试过了 :

select a || b from foo
Run Code Online (Sandbox Code Playgroud)

select  a||', '||b from foo
Run Code Online (Sandbox Code Playgroud)

从评论更新:两列都是类型character(2).

sql postgresql types concatenation coalesce

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

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万
查看次数

如何在PostgreSQL中使用RETURNING和ON CONFLICT?

我在PostgreSQL 9.5中有以下UPSERT:

INSERT INTO chats ("user", "contact", "name") 
           VALUES ($1, $2, $3), 
                  ($2, $1, NULL) 
ON CONFLICT("user", "contact") DO NOTHING
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

如果没有冲突,则返回如下内容:

----------
    | id |
----------
  1 | 50 |
----------
  2 | 51 |
----------
Run Code Online (Sandbox Code Playgroud)

但如果存在冲突,则不会返回任何行:

----------
    | id |
----------
Run Code Online (Sandbox Code Playgroud)

id如果没有冲突,我想返回新列,或者返回id冲突列的现有列.
可以这样做吗?如果是这样,怎么样?

sql postgresql upsert sql-returning

127
推荐指数
7
解决办法
4万
查看次数

纬度和经度的数据类型是什么?

我是PostgreSQL和PostGIS的新手.我想在PostgreSQL 9.1.1数据库表中存储纬度和经度值.我将计算两点之间的距离,通过使用此位置值找到更近的点.

我应该将哪种数据类型用于纬度和经度?

postgresql types postgis latitude-longitude

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

一个表的SQL更新字段来自另一个表的字段

我有两张桌子:

A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]
Run Code Online (Sandbox Code Playgroud)

A将永远是其子集B(意味着所有列A也在其中B).

我想更新具有特定ID输入的记录,其中B包含来自A所有列的数据A.这ID存在于AB.

是否有UPDATE语法或任何其他方法来指定列名称,只是说"设置A的所有列"

我正在使用PostgreSQL,因此也接受了一个特定的非标准命令(但不是首选).

sql postgresql dynamic-sql sql-update

115
推荐指数
6
解决办法
14万
查看次数

使用PL/pgSQL将查询结果存储在变量中

如何将查询结果分配给PL/pgSQL中的变量,这是PostgreSQL的过程语言?

我有一个功能:

CREATE OR REPLACE FUNCTION test(x numeric)
RETURNS character varying AS
$BODY$
DECLARE
name   character varying(255);
begin
 name ='SELECT name FROM test_table where id='||x;

 if(name='test')then
  --do somthing
 else
  --do the else part
 end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

在上面的函数中我需要存储此查询的结果:

'SELECT name FROM test_table where id='||x;
Run Code Online (Sandbox Code Playgroud)

到变量name.

怎么处理这个?

database postgresql stored-procedures plpgsql postgresql-9.1

108
推荐指数
3
解决办法
18万
查看次数