我在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).
怎么实现呢?
我经常需要在重建之前删除PostgreSQL数据库中的所有数据.我将如何直接在SQL中执行此操作?
目前我已经设法提出一个SQL语句,它返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
Run Code Online (Sandbox Code Playgroud)
但是,一旦拥有它们,我就无法以编程方式执行它们.
我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.
select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)
它只是回归
错误:列"first_Name"不存在
不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?
我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.
我有两个字符串列a和b一个表foo.
select a, b from foo返回值a和b.但是,串联a和b不起作用.我试过了 :
select a || b from foo
Run Code Online (Sandbox Code Playgroud)
和
select a||', '||b from foo
Run Code Online (Sandbox Code Playgroud)
从评论更新:两列都是类型character(2).
我在文档中找不到这个问题的明确答案.如果列是数组类型,是否会对所有输入的值进行单独索引?
我创建了一个包含一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)
索引是否有助于此查询?
我在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冲突列的现有列.
可以这样做吗?如果是这样,怎么样?
我是PostgreSQL和PostGIS的新手.我想在PostgreSQL 9.1.1数据库表中存储纬度和经度值.我将计算两点之间的距离,通过使用此位置值找到更近的点.
我应该将哪种数据类型用于纬度和经度?
我有两张桌子:
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存在于A和B.
是否有UPDATE语法或任何其他方法来指定列名称,只是说"设置A的所有列"?
我正在使用PostgreSQL,因此也接受了一个特定的非标准命令(但不是首选).
如何将查询结果分配给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
postgresql ×10
sql ×5
dynamic-sql ×2
plpgsql ×2
types ×2
alter-table ×1
arrays ×1
coalesce ×1
database ×1
identifier ×1
indexing ×1
postgis ×1
sql-in ×1
sql-order-by ×1
sql-update ×1
truncate ×1
upsert ×1
varchar ×1