【问题标题】:How to fetch TEXT column value from postgresql如何从 postgresql 获取 TEXT 列值
【发布时间】:2012-08-28 08:43:59
【问题描述】:

我在 postgreSQL 中有以下简单的表:

CREATE TABLE data ( id bigint NOT NULL, text_column text, );

我在 phpPgAdmin 网站上看到的 text_column 的值是数字(长)。 正如我所读到的,postgreSQL 保留了一个指向实际数据的指针。 如何获取 text_column 的实际字符串值? 正在做:

select text_column from data 

返回数字...

谢谢

【问题讨论】:

标签: postgresql


【解决方案1】:

以下帮助了我们:

select convert_from(loread(lo_open(value::int, x'40000'::int), x'40000'::int),  'UTF8') from t_field;

其中value是字段,包含TEXT,而t_field显然是表名。

【讨论】:

  • 为我工作!谢谢。
  • 这可能很明显,但上面的命令本质上是 SELECT ALL。您还可以使用 where 子句来定位单个记录。例如。 select convert_from(loread(lo_open(value::int, x'40000'::int), x'40000'::int), 'UTF8') from t_field where id=5;
  • 如何删除这些记录?我可以看到您描述的文本,但如果我截断或删除表,我的数据库大小不会改变。我真的很想删除那些记录
  • @gunescelil VACUUM FULL 是否适合您?
  • 实际上,幸运的是,我们仍然没有使用该代码进行生产。所以我删除了所有的 postgres 表并保存了我的磁盘。但是后来我看到了一些大对象的接口。也许有人可以使用这些接口来删除记录
【解决方案2】:

从 psql 运行 \lo_export ID FILE,其中 ID 是存储在表中文本列中的数字,FILE 是结果的路径和文件名。该数字是对大对象表的引用。您可以通过运行 \lo_list 查看其内容。

【讨论】:

    【解决方案3】:

    如果它的 text_column 是文本,这意味着它是一个 oid,这也应该可以工作:

    从数据中选择convert_from(lo_get(text_column::oid), 'UTF8');

    【讨论】:

      【解决方案4】:

      工作正常,可能是字段值是数字:

       > \d+ type
      
       Column    | Type    
      
       name      |  text   
      
       test_id   | integer   
      

      从类型中选择名称;

        name 
      
         AAA
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-21
        • 2020-09-22
        • 1970-01-01
        • 2021-03-09
        • 2015-05-25
        • 1970-01-01
        • 2016-07-08
        • 1970-01-01
        相关资源
        最近更新 更多