我在postgres数据库中有一个表格,用于存储格式为:12223334444
的电话号码(作为varchar)。
据我所知,我将使用美国电话号码,但我认为用所有可能要求的电话号码预先填充数据库是个好主意。也就是说,所有数字都来自11_111_111_111
到19_999_999_999
。
现在我通过使用应用程序代码来实现这一目标,这需要很长时间。
假设我有一个名为phones
的表和一个名为digits
的列,是否有办法使用SQL填充数据库?
谢谢!
答案 0 :(得分:2)
这是一个坏主意。
select 19999999999 - 11111111111;
8888888888
这大约有89亿个电话号码。除非你绝对必须,否则不要建造那么大的桌子。表格严重影响事务日志,索引大小,备份大小和完成时间等
但是,如果你需要为PostgreSQL生成和加载大量这样的数据,有两种明智的方法可以做到。
步骤取决于您是使用PostgreSQL还是使用应用程序代码生成数据。
对于PostgreSQL,在事务中,
如果你一次提交10k行,那么插入大量数据要快得多。实验。如果您这样做,则需要在上述步骤中调整事务边界。 (这些步骤中的每一步都成为一个或多个交易。)
如果您使用应用程序代码,通常最快
答案 1 :(得分:1)
这是一个疯狂的问题,但是postgres有一个答案
SELECT generate_series(1,19999999999)
这将创建一个包含1到19999999999之间所有数字的表
INSERT INTO phone_table(phone number)
SELECT LPAD(g::VARCHAR(12),10,'0') FROM generate_series(1,19999999999) AS g;
这仍然需要很长时间,但它可能比应用程序代码更快。