标签: postgresql

如何在 postgresql 中为选择查询的结果提供标题?

例如我想这样做:

select id,name from first;  
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

查询结果// 这应该是查询的标题  
身份证名称  
1 阿里  
2 萨米人

postgresql

0
推荐指数
1
解决办法
1031
查看次数

可以具有三种状态的列的数据类型:是、否、未知

我有一个应用程序,用户可以在其中做出决定:

  • 是的
  • 未知

我开始使用可以为空的布尔列。

但是事情变得相当复杂,因为我的框架 (django) 没有提供用于开箱即用的搜索表单编码的输入字段。

在搜索表单中,我需要四种状态:

  • 是的
  • 未知
  • 显示全部(在搜索中忽略此列)

相关问题:https : //stackoverflow.com/questions/38307866/search-form-for-nullbooleanfield

一个旧的经验法则再次出现在我的脑海中:

避免可为空的数据库列。

我想将数据类型从可为空的布尔字段更改为不同的类型。

可以具有三种状态的列的哪种数据类型:是、不是、未知?

我使用 Postgres 9,但 AFAIK 这对于这个问题应该无关紧要。

postgresql null datatypes

0
推荐指数
1
解决办法
1236
查看次数

运行 pg_resetxlog 后 PostgreSQL 损坏

我们在 Ubuntu 14.04 上使用 PostgreSQL 9.3 版。这个 PostgreSQL 服务器在我们所有的应用服务器 (Odoo) 之间共享,所以我们让它在单独的环境中运行。

星期六,我们在此数据库服务器上发现磁盘已满问题。在我们进一步调查中,我们发现备份服务器(酒保)已关闭。因此所有存档日志都保留在数据库服务器上。这占用了整个磁盘。我们的数据库备份服务器可能在一个月前停止工作。

通过谷歌搜索,我们找到了一个解决方案,即通过重置 pg_xlog 文件来解决这个问题。所以我们使用 pg_restxlog 命令清理日志文件。正如论坛所说,磁盘已清除,我们重新启动了服务器。但是没有找到数据库:-(。我们使用 psql - list 命令列出。到目前为止没有任何效果。我们也无法从酒保恢复备份。然后我们继续调查,我们发现所有数据都在基本文件夹下保持安全Postgres 的主要数据路径。

我们执行重置日志的步骤如下。

  1. 尝试停止数据库服务器

    须藤服务 postgresql 停止

  2. 以 Postgres 用户身份登录

    须藤 su - postgres

  3. 运行重置命令。

    /usr/lib/postgresql/9.3/bin/pg_resetxlog -f /var/lib/postgresql/9.3/main/

  4. 禁用 postgres.conf 文件中的酒保配置以停止备份过程一段时间。

  5. 并重启服务器

/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)

postgresql postgresql-9.3 barman

0
推荐指数
1
解决办法
2842
查看次数

为什么不能在窗口函数中聚合后进行基本操作?像 (max(x)+5), vs (5+max(x))

聚合和窗口函数的语法令人困惑,这不起作用,

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 的东西?有没有办法消除查询的歧义?

postgresql syntax aggregate window-functions

0
推荐指数
1
解决办法
218
查看次数

只为一个数据库创建包含 SQL 语句的日志文件

我有两个 Postgres 数据库。我可以在日志文件中只为其中之一写入 SQL 语句吗?

postgresql configuration

0
推荐指数
1
解决办法
348
查看次数

查询多个日期范围

我有 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)

postgresql

0
推荐指数
1
解决办法
236
查看次数

JSON 类型的 PostgreSQL 错误?

此查询不起作用,但错误没有意义

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。

postgresql json

0
推荐指数
1
解决办法
2730
查看次数

更改所有架构对象的所有者

我想更改架构中所有对象的所有者。为此,我使用以下函数:

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)

schema postgresql role plpgsql

0
推荐指数
1
解决办法
5345
查看次数

处理 MS-SQL 和 PostgreSQL 货币数据类型之间的差异

这是我上一个问题的后续/是否可以在 PostgreSQL 中插入货币数据类型的未格式化数据

  1. 我可以通过将其类型转换为数字来读取货币数据

     SELECT '52093.89'::money::numeric
    
    Run Code Online (Sandbox Code Playgroud)

    它会给出不一致的数据,四舍五入等吗?

  2. 根据 ISO 标准,money数据类型大小为 (19,4) 但为什么 PostgreSQL 返回大小为 2147483647?这个大小取决于语言环境吗?

  3. 使用money数据类型来存储/检索特定于区域设置的值是个好主意吗?如果不是,什么时候money数据类型最合适?

我必须在money某些情况下使用数据类型。我担心的是,如果我将money数据类型值视为十进制值,我会遇到任何问题吗?

我不关心特定于语言环境的值,例如符号、数字和十进制分组等。我可以根据lc_monetary设置存储货币数据类型值并通过将其类型转换为读取numeric吗?

postgresql pgadmin money postgresql-9.4

0
推荐指数
1
解决办法
817
查看次数

使用 Postgres 在多行中投影时间范围

我有一些这样的行:

 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(...)所以我想知道有没有更优雅(和有效)的方法来做到这一点?

postgresql

0
推荐指数
1
解决办法
65
查看次数