小编KIM*_*KIM的帖子

pg_column_size如何小于octet_length?

我正在寻找通过引用列类型和长度大小来获得预期的表大小.我正试图用pg_column_size它.

在测试函数时,我意识到这个函数似乎有些问题.

结果值pg_column_size(...)有时甚至小于octet_length(...)同一字符串上的返回值.

列中只有数字字符.

postgres=# \d+ t5
                           Table "public.t5"
 Column |       Type        | Modifiers | Storage  | Stats target | Description 
--------+-------------------+-----------+----------+--------------+-------------
 c1     | character varying |           | extended |              | 
Has OIDs: no

postgres=# select pg_column_size(c1), octet_length(c1) as octet from t5;
 pg_column_size | octet 
----------------+-------
              2 |     1
            704 |   700
            101 |  7000
            903 | 77000
(4 rows)
Run Code Online (Sandbox Code Playgroud)

这是虫子还是什么?是否有人使用某些公式从列类型和长度值计算预期的表大小?

postgresql

7
推荐指数
1
解决办法
4617
查看次数

postgresql加密/解密

我正在进行字段加密/解密.

我选择的是

select encrypt('123456789012345','1234','aes');
              encrypt               
------------------------------------
 \x34591627f9c8eae417fc7cbbf458592c
(1 row)
Run Code Online (Sandbox Code Playgroud)

我把数据加密了,另外一个字符串在解密后如下...

postgres=# select decrypt('\x34591627f9c8eae417fc7cbbf458592c','1234','aes');
             decrypt              
----------------------------------
 \x313233343536373839303132333435
(1 row)
Run Code Online (Sandbox Code Playgroud)

我做错了吗?(我知道这种要求可能是愚蠢的......)

我要做的只是获得一种最简单的方法,加密数据的尺寸很小......

提前致谢...

postgresql

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

日期无效时引发错误

我想要做的是在日期超出支持范围的情况下提高超出范围的错误,例如类型转换.

我在CentOS上使用PostgreSQL-9.1.6.问题如下......

postgres=# select to_date('20130229','yyyymmdd');
  to_date   
------------
 2013-03-01
(1 row)
Run Code Online (Sandbox Code Playgroud)

但我想看到的输出是:

postgres=# select '20130229'::date;
ERROR:  date/time field value out of range: "20130229"
Run Code Online (Sandbox Code Playgroud)

浏览网页我找到了一个信息丰富的页面.所以我添加IS_VALID_JULIAN了函数体to_date,将+下面标记的四行添加到formatting.c:

Datum
to_date(PG_FUNCTION_ARGS)
{
    text       *date_txt = PG_GETARG_TEXT_P(0);
    text       *fmt = PG_GETARG_TEXT_P(1);
    DateADT         result;
    struct pg_tm tm;
    fsec_t          fsec;

    do_to_timestamp(date_txt, fmt, &tm, &fsec);

+       if (!IS_VALID_JULIAN(tm.tm_year, tm.tm_mon, tm.tm_mday))
+       ereport(ERROR,
+               (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+                errmsg("date out of range: \"%s\"",text_to_cstring(date_txt))));

   result = date2j(tm.tm_year, tm.tm_mon, tm.tm_mday) - POSTGRES_EPOCH_JDATE;

   PG_RETURN_DATEADT(result);
}
Run Code Online (Sandbox Code Playgroud)

然后我重建了PostgreSQL: …

postgresql

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

具有页面布局的表大小

我在Oracle Linux Server 6.3版上使用PostgreSQL 9.2.

根据存储布局文档,页面布局包含:

  • PageHeaderData(24字节)
  • n项目的数量(索引项/表项)AKA ItemIdData(4字节)
  • 可用空间
  • n项目数量
  • 特殊空间

我测试它以制作一些公式来估计预期的表格大小......(TOAST概念可能会被忽略.)

postgres=# \d t1;

                      Table "public.t1"
    Column    ','         Type         ','         Modifiers
---------------+------------------------+------------------------------
 code          |character varying(8)    |not null
 name          |character varying(100)  |not null
 act_yn        |character(1)            |not null default 'N'::bpchar
 desc          |character varying(100)  |not null
 org_code1     |character varying(3)    |
 org_cole2     |character varying(10)   |

 postgres=# insert into t1 values(
'11111111', -- 8
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'Y',
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'111',
'1111111111');

postgres=# select * from pgstattuple('t1');
 table_len | tuple_count …
Run Code Online (Sandbox Code Playgroud)

postgresql storage database-design types

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

如何制作订购单?

我正在使用PostgreSQL 9.1.6并尝试构建递归SQL。
我想排序就像ORDER SIBLINGS BY在SQL Server中那样。

编者按:这可能是应该指甲骨文那里ORDER SIBLINGS BY确实存在

测试表:

create table RECURSIVE_TEST(
  EMP_ID int,
  MANAGER_ID int,
  EMP_NAME varchar(30)
);

insert into recursive_test values
(1  ,0 ,'MANAGER1'),
(2  ,0 ,'MANAGER2'),
(3  ,0 ,'MANAGER3'),
(4  ,0 ,'MANAGER4'),
(5  ,1 ,'emp1'),
(6  ,3 ,'emp2'),
(7  ,4 ,'emp3'),
(8  ,2 ,'emp4'),
(9  ,2 ,'emp5'),
(10 ,3 ,'emp6'),
(11 ,4 ,'emp7'),
(12 ,3 ,'emp8'),
(13 ,4 ,'emp9'),
(14 ,2 ,'emp10'),
(15 ,2 ,'emp11'),
(16 ,1 ,'emp12'); …
Run Code Online (Sandbox Code Playgroud)

sql postgresql sql-order-by common-table-expression

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

当我替换正在运行的PostgreSQL服务器使用的.so文件时,它会崩溃

我在CentOS 5.8上运行PostgreSQL 9.2.8.

构建我自己的contrib模块,我发现只是extension_name.so通过更改文件cp使服务器进程崩溃,但刷新extension_name.so文件make && make install正常工作.

这看起来很严重,因为服务器进程崩溃会导致意外重新启动集群.

这是完全一样的pg_stat_statements,并pg_buffers根据我自己的测试.

为什么会这样?谢谢.

c unix postgresql install mmap

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

如何检查表是否具有主键值的记录?

我有一个例外,以防止在我的oracle上插入相同的记录.

如果已存在具有特定键值的记录,则必须启用记录插入接口.

我听说COUNT(*)有很多我不想用的费用.

有没有其他方法可以降低成本?

oracle

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

如何获取操作系统信息,无论是LINUX还是WINDOWS?

我在我的QT应用程序上运行"QUdpSocket :: ShareAddress"但是Windows忽略了ShareAddress.所以我试图通过在运行时识别操作系统来解决这个问题.我听到了一些关于窗口版本标识符的信息,但我看不出任何解决方案来解决我的问题.如果有任何建议,我们将非常感激.谢谢.

c++ qt

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

gcc -x java helloworld.java?

我是 Java 新手。

我正在尝试连接到数据库,但无法编译我的测试程序 ( helloworld.java)

[root@localhost my_src]# gcc -v
Using built-in specs.
Target: i386-redhat-linux
........... --enable-languages=c,c++,objc,obj-c++,java,fortran,ada..............
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-52)

[root@localhost my_src]# gcc -x java helloworld.java
gcc: error trying to exec 'jc1': execvp No such a file or directory
Run Code Online (Sandbox Code Playgroud)

我知道我必须安装 JDK 才能编写 Java 类,但 gcc 不足以编译我的 helloworld.java?如果是这样的话,上面有什么问题吗?我缺少什么吗?

java

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

postgresql des encrypt

我有oracle数据库移动到新的postgresql服务器.

有些表具有字段sesitive,并且这些表都通过DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT/DESDECRYPT加密.

问题出在这里.postgresql的加密数据大小(bytea类型)的大小应该与oracle相同.

我试图用aes(加密/解密)完成它,它比原始数据大约三倍.(oracle使用des算法需要16byte,postgresql使用aes需要33byte,原始数据需要13byte.)

我也尝试了postgresql crypt,但是手册没有提到解密它的方式,限制了8byte的原始数据大小.

现在我真的需要加密方法,它采用尽可能小的加密数据大小并提供解密方法.

有没有好办法或其他选择?提前致谢.

encryption postgresql pgcrypto

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