2017-12-13 26 views
0

それぞれ可変数のタグを含む記事のリストを処理します。後で更新するタグの数がわからない場合は、列の配列としてタグのリストを保存するにはどうすればよいですか?初めて、同じ長さのタグのリストをNoneで埋めて挿入することはできますが、新しいアップデートではもっと長いタグのリストが得られるでしょうか?可変長配列をデータベースに書き込む

タグの今日のリスト:

[tag1, tag2] 
[tag1, tag2, tag3] 

okが、それを得ました!最大長さが3で、同じ長さを作る:タグの

​​

明日のリスト:

[tag1, tag2] 
[tag1, tag2, tag3] 
[tag1, tag2, tag3, tag4] 

[OK]を、それを得ました!私の最大長は3:

[tag1, tag2, None] 
[tag1, tag2, tag3] 
[tag1, tag2, tag3, tag4] <- here is problem 

多分誰かがこのケースのために良い解決策を知っていますか?

更新:

for tags in tags_list: 
    cursor.execute("""INSERT INTO tags VALUES (%s)""", (tags,)) 
+0

Postgresのアレイの最大長たとえあなたがそのように定義していても制限されていません。だからあなたの質問は何ですか? –

+0

@a_horse_with_no_name質問はどのように可変長の配列を格納することができます –

+0

@Antosha - あなたは別々の列に各タグを保持しないでください - 右?.. –

答えて

2

あなたは配列がPostgresの中に固定された長さを持っているという印象の下にあるように見える - しかし、そうではない。

あなたがタグを追加したい場合は、単にそれらを追加します。

-- append a single tag 
update antosha 
    set tags = tags || 'postgresql' 
where id = 1; 

-- append multiple tags 
update antosha 
    set tags = tags || array['kotlin', 'python'] 
where id = 2; 

または完全にタグを置き換える:

update antosha 
    set tags = array['one', 'two', 'three', 'four', 'five', 'six'] 
where id = 1; 

または単一の要素削除:

update antosha 
    set tags = array_remove(tags, 'two') 
where id = 1; 

または単一要素置き換える:

update antosha 
    set tags = array_replace(tags, 'one', '001') 
where id = 1; 
1

を同じように格納され:

t=# create table a (c text[]); 
CREATE TABLE 
t=# insert into a values(array['a']),(array['a','b']),(array['a','b','2']); 
INSERT 0 3 
t=# select * from a; 
    c 
--------- 
{a} 
{a,b} 
{a,b,2} 
(3 rows) 
関連する問題