zoukankan      html  css  js  c++  java
  • PostgreSQL的hstore初步学习

    安装hstore:

    进入源代码的 /contrib/hstore 目录,然后执行gmake 和 gmake install:

    [root@pg200 hstore]# gmake
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o hstore_io.o hstore_io.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o hstore_op.o hstore_op.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o hstore_gist.o hstore_gist.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o hstore_gin.o hstore_gin.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o hstore_compat.o hstore_compat.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o crc32.o crc32.c
    gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -shared -o hstore.so hstore_io.o hstore_op.o hstore_gist.o hstore_gin.o hstore_compat.o crc32.o -L../../src/port  -Wl,-rpath,'/usr/local/pgsql/lib',--enable-new-dtags 

    gmake:

    [root@pg200 hstore]# gmake install
    /bin/mkdir -p '/usr/local/pgsql/lib'
    /bin/mkdir -p '/usr/local/pgsql/share/extension'
    /bin/mkdir -p '/usr/local/pgsql/share/extension'
    /bin/sh ../../config/install-sh -c -m 755  hstore.so '/usr/local/pgsql/lib/hstore.so'
    /bin/sh ../../config/install-sh -c -m 644 ./hstore.control '/usr/local/pgsql/share/extension/'
    /bin/sh ../../config/install-sh -c -m 644 ./hstore--1.1.sql ./hstore--1.0--1.1.sql ./hstore--unpackaged--1.0.sql  '/usr/local/pgsql/share/extension/'
    [root@pg200 hstore]# 

    然后,启动PostgreSQL,再启动psql后,安装hstore扩展:

    postgres=# create extension hstore;
    CREATE EXTENSION
    postgres=# 

    进行测试:

    建表:

    postgres=# create table hstore_test(item_id serial, data hstore);
    NOTICE:  CREATE TABLE will create implicit sequence "hstore_test_item_id_seq" for serial column "hstore_test.item_id"
    CREATE TABLE
    postgres=# 

    插入数据:

    postgres=# INSERT INTO hstore_test (data) VALUES ('"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"');
    INSERT 0 1
    postgres=# select * from hstore_test;
     item_id |                         data                         
    ---------+------------------------------------------------------
           1 | "key1"=>"value1", "key2"=>"value2", "key3"=>"value3"
    (1 row)
    
    postgres=# 

    修改数据:

    postgres=# UPDATE hstore_test SET data = delete(data, 'key2')
    postgres-# ;
    UPDATE 1
    postgres=# select * from hstore_test;
     item_id |                data                
    ---------+------------------------------------
           1 | "key1"=>"value1", "key3"=>"value3"
    (1 row)
    
    postgres=# 
    postgres=# UPDATE hstore_test SET data = data || '"key4"=>"some value"'::hstore;
    UPDATE 1
    postgres=# select * from hstore_test;
     item_id |                           data                           
    ---------+----------------------------------------------------------
           1 | "key1"=>"value1", "key3"=>"value3", "key4"=>"some value"
    (1 row)
    
    postgres=# 

    按Key值查询:

    postgres=# SELECT * FROM hstore_test WHERE data ? 'key4';
     item_id |                           data                           
    ---------+----------------------------------------------------------
           1 | "key1"=>"value1", "key3"=>"value3", "key4"=>"some value"
    (1 row)
    
    postgres=# 
    postgres=# SELECT * FROM hstore_test WHERE NOT data ? 'key5';
     item_id |                           data                           
    ---------+----------------------------------------------------------
           1 | "key1"=>"value1", "key3"=>"value3", "key4"=>"some value"
    (1 row)
    
    postgres=# SELECT * FROM hstore_test WHERE data @> '"key4"=>"some value"'::hstore;
     item_id |                           data                           
    ---------+----------------------------------------------------------
           1 | "key1"=>"value1", "key3"=>"value3", "key4"=>"some value"
    (1 row)
    
    postgres=# SELECT data -> 'key4' FROM hstore_test;
      ?column?  
    ------------
     some value
    (1 row)
    
    postgres=# SELECT item_id, (each(data)).* FROM hstore_test WHERE item_id = 2;
     item_id | key | value 
    ---------+-----+-------
    (0 rows)
    
    postgres=# SELECT item_id, (each(data)).* FROM hstore_test WHERE item_id = 1;
     item_id | key  |   value    
    ---------+------+------------
           1 | key1 | value1
           1 | key3 | value3
           1 | key4 | some value
    (3 rows)
    
    postgres=# 
  • 相关阅读:
    Atitit.ati  str  字符串增强api
    Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c#
    Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c#
    Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
    Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
    Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
    Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
    swfupload 上传控件的配置
    SWFUpload下载地址
    js 转化类似这样的时间( /Date(1389060261000)/)问题
  • 原文地址:https://www.cnblogs.com/gaojian/p/3351294.html
Copyright © 2011-2022 走看看