例如我想这样做:
select id,name from first;
Run Code Online (Sandbox Code Playgroud)
它应该是这样的:
查询结果// 这应该是查询的标题 身份证名称 1 阿里 2 萨米人
我有一个应用程序,用户可以在其中做出决定:
我开始使用可以为空的布尔列。
但是事情变得相当复杂,因为我的框架 (django) 没有提供用于开箱即用的搜索表单编码的输入字段。
在搜索表单中,我需要四种状态:
相关问题:https : //stackoverflow.com/questions/38307866/search-form-for-nullbooleanfield
一个旧的经验法则再次出现在我的脑海中:
避免可为空的数据库列。
我想将数据类型从可为空的布尔字段更改为不同的类型。
可以具有三种状态的列的哪种数据类型:是、不是、未知?
我使用 Postgres 9,但 AFAIK 这对于这个问题应该无关紧要。
我们在 Ubuntu 14.04 上使用 PostgreSQL 9.3 版。这个 PostgreSQL 服务器在我们所有的应用服务器 (Odoo) 之间共享,所以我们让它在单独的环境中运行。
星期六,我们在此数据库服务器上发现磁盘已满问题。在我们进一步调查中,我们发现备份服务器(酒保)已关闭。因此所有存档日志都保留在数据库服务器上。这占用了整个磁盘。我们的数据库备份服务器可能在一个月前停止工作。
通过谷歌搜索,我们找到了一个解决方案,即通过重置 pg_xlog 文件来解决这个问题。所以我们使用 pg_restxlog 命令清理日志文件。正如论坛所说,磁盘已清除,我们重新启动了服务器。但是没有找到数据库:-(。我们使用 psql - list 命令列出。到目前为止没有任何效果。我们也无法从酒保恢复备份。然后我们继续调查,我们发现所有数据都在基本文件夹下保持安全Postgres 的主要数据路径。
我们执行重置日志的步骤如下。
尝试停止数据库服务器
须藤服务 postgresql 停止
以 Postgres 用户身份登录
须藤 su - postgres
运行重置命令。
/usr/lib/postgresql/9.3/bin/pg_resetxlog -f /var/lib/postgresql/9.3/main/
禁用 postgres.conf 文件中的酒保配置以停止备份过程一段时间。
/var/lib/postgresql/9.3/main/的文件内容
postgres@server2:~$ du -h 9.3/main/
12K 9.3/main/pg_notify
28M 9.3/main/base/2735749
73M 9.3/main/base/4172290
46M 9.3/main/base/4410494
81M 9.3/main/base/3002089
43M 9.3/main/base/4282962
47M 9.3/main/base/3377227
130M 9.3/main/base/4098067
44M 9.3/main/base/1682791
58M 9.3/main/base/3377231
4.0K 9.3/main/base/pgsql_tmp
6.1M 9.3/main/base/12030
41M 9.3/main/base/4280118
54M 9.3/main/base/3149391
45M 9.3/main/base/4202614
49M 9.3/main/base/3344071
45M …Run Code Online (Sandbox Code Playgroud) 聚合和窗口函数的语法令人困惑,这不起作用,
SELECT (max(x)+5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
虽然这有效
SELECT 5+max(x) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
如果运算符是可交换的,那很好,但我试图将间隔除以秒(在我的特定情况下,尽管我解决了它)。有没有办法简化这个。
SELECT (max(x)/5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)
所以不需要另一个封装查询?这是一个 PostgreSQL 的东西,还是一个 SQL 的东西?有没有办法消除查询的歧义?
我有两个 Postgres 数据库。我可以在日志文件中只为其中之一写入 SQL 语句吗?
我有 Postgres 9.5 版。我需要通过一个查询来获取日期范围的结果:
2017-02-16 - 2017-02-26
2017-01-16 - 2017-01-26
2016-12-16 - 2016-12-26
2016-11-16 - 2016-11-26
Run Code Online (Sandbox Code Playgroud)
我怎么能用一个查询做到这一点?我试过:
SELECT sum(sell) as sell
FROM "stat"
LEFT JOIN "stat_key" ON stat.stat_key = stat_key.id
WHERE ("stat"."date" >= '2017-02-16' AND stat."date" <= '2017-02-26')
AND ("stat"."date" >= '2017-01-16' AND stat."date" <= '2017-01-26')
AND ("stat"."date" >= '2016-12-16' AND stat."date" <= '2017-12-26')
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
CREATE TABLE stat
AS
SELECT date::date, sell
FROM ( VALUES
( '2016-11-14', 0 ),
( '2017-01-27', 0 ),
( '2017-01-27', 0 ),
( '2016-11-10', …Run Code Online (Sandbox Code Playgroud) 此查询不起作用,但错误没有意义
SELECT count(*) FROM t
WHERE json_typeof(info->'vatids')='array' AND json_array_length(info->'vatids')>1;
Run Code Online (Sandbox Code Playgroud)
错误:无法获得标量的数组长度
PS:同上 JSONb。
我想更改架构中所有对象的所有者。为此,我使用以下函数:
CREATE OR REPLACE FUNCTION chown(in_schema VARCHAR, new_owner VARCHAR)
RETURNS void AS
$$
DECLARE
object_types VARCHAR[];
object_classes VARCHAR[];
object_type record;
r record;
BEGIN
object_types = '{type,table,sequence,index,table,view}';
object_classes = '{c,t,S,i,r,v}';
FOR object_type IN
SELECT unnest(object_types) type_name,
unnest(object_classes) code
loop
FOR r IN
EXECUTE '
select n.nspname, c.relname
from pg_class c, pg_namespace n
where n.oid = c.relnamespace
and nspname = ''' || in_schema || '''
and relkind = ''' || object_type.code || ''''
loop
raise notice 'Changing ownership of % %.% to …Run Code Online (Sandbox Code Playgroud) 这是我上一个问题的后续/是否可以在 PostgreSQL 中插入货币数据类型的未格式化数据
我可以通过将其类型转换为数字来读取货币数据
SELECT '52093.89'::money::numeric
Run Code Online (Sandbox Code Playgroud)
它会给出不一致的数据,四舍五入等吗?
根据 ISO 标准,money数据类型大小为 (19,4) 但为什么 PostgreSQL 返回大小为 2147483647?这个大小取决于语言环境吗?
使用money数据类型来存储/检索特定于区域设置的值是个好主意吗?如果不是,什么时候money数据类型最合适?
我必须在money某些情况下使用数据类型。我担心的是,如果我将money数据类型值视为十进制值,我会遇到任何问题吗?
我不关心特定于语言环境的值,例如符号、数字和十进制分组等。我可以根据lc_monetary设置存储货币数据类型值并通过将其类型转换为读取numeric吗?
我有一些这样的行:
avg_income | date_from | date_to
------------+------------+------------
1256.9 | 2016-11-21 | 2017-07-10
4383.2 | 2017-05-06 | 2017-06-01
Run Code Online (Sandbox Code Playgroud)
我想将这些avg_income值投影到相应的月份,如下所示:
avg_income | month
------------+------------
1256.9 | 2016-11-01
1256.9 | 2016-12-01
1256.9 | 2017-01-01
1256.9 | 2017-02-01
1256.9 | 2017-03-01
1256.9 | 2017-04-01
1256.9 | 2017-05-01
1256.9 | 2017-06-01
1256.9 | 2017-07-01
4383.2 | 2017-05-01
4383.2 | 2017-06-01
Run Code Online (Sandbox Code Playgroud)
到目前为止,我刚刚提出了一个可怕的问题,FOR/LOOP/generate_series(...)所以我想知道有没有更优雅(和有效)的方法来做到这一点?