Quantcast

How to store variable data in a field?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to store variable data in a field?

Andre Lopes-2
Hi all,

I need to create a table to store Twitter accounts information,
Facebook and other social networks details for API login. I need to
know if it is possible to store the account details("account_details"
field) in a field that contains something like an array. I need to
store this data in an array like field because the details for each
social network accounts are different. What is my best choice for the
field "account_details"?

CREATE TABLE "account" (
        "id_account" int4 NOT NULL,
        "id_account_type" int4 NOT NULL,
        "n_account" varchar(50) NOT NULL,
        "account_details" varchar NOT NULL,
        "comment" varchar(2000),
  PRIMARY KEY("id_account","id_account_type")
);

I will need to store something like this:

Twitter: array("account_name" => "xpto", "hash1" => "3432454355",
"megahash" => "dfcf786fds987fds897")
Facebook: array("account_name" => "xpto", "fb_special_hash" =>
"dsdsad4535", "fb_security_hash" => "dsadsad454355",
"fb_extended_hash" => "sdasfe5r4536556fsgg")

It is possible to put something like that in a field? If yes, what
datatype should I choose? Pros and cons of doing this?

Best Regards,

--
Sent via pgsql-general mailing list ([hidden email])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to store variable data in a field?

Thomas Kellerer
Andre Lopes, 21.02.2012 16:11:

> Hi all,
>
> I need to create a table to store Twitter accounts information,
> Facebook and other social networks details for API login. I need to
> know if it is possible to store the account details("account_details"
> field) in a field that contains something like an array. I need to
> store this data in an array like field because the details for each
> social network accounts are different. What is my best choice for the
> field "account_details"?
>
> CREATE TABLE "account" (
> "id_account" int4 NOT NULL,
> "id_account_type" int4 NOT NULL,
> "n_account" varchar(50) NOT NULL,
> "account_details" varchar NOT NULL,
> "comment" varchar(2000),
>    PRIMARY KEY("id_account","id_account_type")
> );
>
> I will need to store something like this:
>
> Twitter: array("account_name" =>  "xpto", "hash1" =>  "3432454355",
> "megahash" =>  "dfcf786fds987fds897")
> Facebook: array("account_name" =>  "xpto", "fb_special_hash" =>
> "dsdsad4535", "fb_security_hash" =>  "dsadsad454355",
> "fb_extended_hash" =>  "sdasfe5r4536556fsgg")
>
> It is possible to put something like that in a field? If yes, what
> datatype should I choose? Pros and cons of doing this?

Use the hstore datatype. That's exactly what you are looking for

http://www.postgresql.org/docs/current/static/hstore.html




--
Sent via pgsql-general mailing list ([hidden email])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: How to store variable data in a field?

bartt
Hi,
I am going to start with quotation: "PostgreSQL is a powerful, open source object-relational database system."

So let's use objects (TYPES):
First You have to create proper types:

CREATE TYPE "Facebook" AS
   (account_name text,
    fb_special_hash text,
    fb_security_hash text,
    fb_extended_hash text);

CREATE TYPE "Twitter" AS
   (account_name text,
    hash1 bigint, --assume this is bigint not text
    megahash text);

Next You have to modify Your table to handle types:
ALTER TABLE public.account ADD COLUMN "TweeterInfo" "Twitter";
ALTER TABLE public.account ADD COLUMN "FacebookInfo" "Facebook";

there is nothing special, You simply use Your types as column types.

Next few examples of using types:
insert into table
INSERT INTO public.account(
            id_account, id_account_type, n_account, account_details, comment, 
            "TweeterInfo", "FacebookInfo")
    VALUES (1, 2, 'ABc', 'test', 'test comment', 
ROW('xpto', 3432454355, 'dfcf786fds987fds897'), ROW('xpto', 'dsdsad4535', 'dsadsad454355', 'sdasfe5r4536556fsgg'));

And SELECT examples:
SELECT * 
FROM public.account
WHERE (account."TweeterInfo").account_name = 'xpto';

SELECT (account."TweeterInfo").megahash
FROM public.account
WHERE (account."TweeterInfo").account_name = 'xpto';

You can find more in doc: 

To be noticed: 
using hstore is good idea too - this type is dedicated to be used with key-value pairs with existing set of build-in functions.

Custom type gives You possibility to create table of this type or function returning this type as row or set of rows.

More SQL oriented solution is to create one/two new tables to store these values, or extend table account with few new columns (if all of them are required).


Regards,
Bartek


2012/2/21 Thomas Kellerer <[hidden email]>
Andre Lopes, <a href="tel:21.02.2012%2016" value="+12102201216" target="_blank">21.02.2012 16:11:

Hi all,

I need to create a table to store Twitter accounts information,
Facebook and other social networks details for API login. I need to
know if it is possible to store the account details("account_details"
field) in a field that contains something like an array. I need to
store this data in an array like field because the details for each
social network accounts are different. What is my best choice for the
field "account_details"?

CREATE TABLE "account" (
       "id_account" int4 NOT NULL,
       "id_account_type" int4 NOT NULL,
       "n_account" varchar(50) NOT NULL,
       "account_details" varchar NOT NULL,
       "comment" varchar(2000),
  PRIMARY KEY("id_account","id_account_type")
);

I will need to store something like this:

Twitter: array("account_name" =>  "xpto", "hash1" =>  "<a href="tel:3432454355" value="+13432454355" target="_blank">3432454355",
"megahash" =>  "dfcf786fds987fds897")
Facebook: array("account_name" =>  "xpto", "fb_special_hash" =>
"dsdsad4535", "fb_security_hash" =>  "dsadsad454355",
"fb_extended_hash" =>  "sdasfe5r4536556fsgg")

It is possible to put something like that in a field? If yes, what
datatype should I choose? Pros and cons of doing this?

Use the hstore datatype. That's exactly what you are looking for

http://www.postgresql.org/docs/current/static/hstore.html





--
Sent via pgsql-general mailing list ([hidden email])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Loading...