1

を使用して Postgres データベースに配列を挿入できることはわかっていますpg_query

INSERT into table (field) VALUES ('{{element, element},{}}')

しかし、使用はpg_insertどうですか?

$array["field"] = "{{element, element},{}}";
$result = pg_insert($con, "table", $array);

文字列は実際に2D Postgres 配列として{{element, element},{}}挿入されますか?field

私はいつもそれをテストしたいと思っていましたが、現在、テストするPostgreSQL DBがありません..

4

2 に答える 2

3

私はちょうどあなたの特定の例を実行しました。

(1) Postgres:

CREATE TABLE atable (afield text[][]);

(2)PHPで:

$array["afield"] = "{{'element', 'element'},{}}";
$result = pg_insert($this->conn, "atable", $array);

そして、次のエラーが発生しました。

Notice: pg_insert(): Unknown or system data type '_text' for 'afield' in ...

配列の値をいじってみました: 2x2 配列、1 次元などにします - 同じ結果です。フィールドを1次元配列にするようにテーブルをtext[]変更し、それに応じてコードを変更しましたが、それでも同じ結果が得られます。

私はさらに掘り下げ始め、PHPドキュメントpg_insert次のことを見つけました。

この機能は実験的です。この関数の動作、その名前、および関連するドキュメントは、PHP の将来のリリースで予告なしに変更される可能性があります。この機能は、自己責任で使用してください。

基本的に、それはかなりバグが多く、使用すべきではありません。興味深いことに、

pg_query("INSERT INTO...")

うまく動作します。うまくいけば、これはあなたの質問に答えます。:)

于 2012-06-11T13:11:22.883 に答える
0

次元はいくつでも構いませんが、2 つでも構いません。

=> CREATE SCHEMA ztest;
CREATE SCHEMA
=> CREATE TABLE tt (a int[3][3]);
CREATE TABLE
=> INSERT INTO tt VALUES (ARRAY[ARRAY[1,2,3], ARRAY[4,5,6], ARRAY[7,8,9]]), (ARRAY[ARRAY[11,12,13],ARRAY[14,15,16],ARRAY[17,18,19]]);
INSERT 0 2
=> SELECT * FROM tt;
                 a
------------------------------------
 {{1,2,3},{4,5,6},{7,8,9}}
 {{11,12,13},{14,15,16},{17,18,19}}
(2 rows)

=> INSERT INTO tt VALUES ('{{21,22,23},{24,25,26},{27,28,29}}');
INSERT 0 1
=> SELECT * FROM tt;
                 a
------------------------------------
 {{1,2,3},{4,5,6},{7,8,9}}
 {{11,12,13},{14,15,16},{17,18,19}}
 {{21,22,23},{24,25,26},{27,28,29}}
(3 rows)

=> SELECT a[2][3] FROM tt;
 a
----
  6
 16
 26
(3 rows)
于 2012-06-11T12:55:01.743 に答える